当前位置: 首页 > news >正文

wordpress 3d标签插件搜索引擎优化seo专员招聘

wordpress 3d标签插件,搜索引擎优化seo专员招聘,新手学做网站学哪些知识,网站购买后如何做单链表的介绍和实现 一.基本概念1.基本结构2.结构体节点的定义#xff1a; 二.功能接口的实现0.第一个节点#xff1a;plist1打印链表2创建一个节点3.头插4.头删5.尾插6.尾删7.查找8.在pos之前插入x9.在pos之后插入x10.删除pos位置11.删除pos的后一个位置12.链表释放 三.整体… 单链表的介绍和实现 一.基本概念1.基本结构2.结构体节点的定义 二.功能接口的实现0.第一个节点plist1打印链表2创建一个节点3.头插4.头删5.尾插6.尾删7.查找8.在pos之前插入x9.在pos之后插入x10.删除pos位置11.删除pos的后一个位置12.链表释放 三.整体代码 一.基本概念 1.基本结构 概念链表是一种物理存储结构上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 逻辑结构前面的叫做数据域后面叫做指针域指针是用来保存下一个节点的地址的。在逻辑上是这样连续的但是在实际的物理结构上面空间上不是连续的。 物理结构这些都是节点在内存中是通过前一个节点保存后一个节点的地址这样的话就可以连续去寻找链表数据。 2.结构体节点的定义 二.功能接口的实现 0.第一个节点plist 如果我们想要创建好一个链表并且去使用他我们需要有这些节点并且通过结构体的成员变量去连接我们的这个结构体构成一个链表的状态因为我们的方向是单向的所以每一次使用的时候我们应该需要知道第一个节点的地址并且第一个节点它在逻辑上必须处于链表的第一个位置我们在进行接口的操作都是依赖于我们的第一个节点。第一个节点如果要变化那么我们的在主函数中的第一个节点的地址就要变化地址的变化是需要传二级指针的 1打印链表 打印链表只需要循环遍历一次链表的数据内容。不需要对第一个节点的地址发生改变 //打印链表 void SLTprint(SLTNode* plist) {//循环遍历不去更改头所以不需要传二级指针//打印之前我们需要注意我们是否有数据打印//说明链表已经没有数值或者还没有节点数据assert(plist!NULL);SLTNode* cur plist;//一个节点的下一个是空就不打印数据了while (cur){printf(%d-, cur-data);//循环的一个条件cur cur-next;}printf(NULL\n);}2创建一个节点 一个新节点的创建需要注意一个参数和一个返回值参数是我们的节点的数据值返回的参数是这个节点的地址因为我们只能通过存储地址的方式进行链表的连接。 //创建一个节点 SLTNode* BuySListNode(STLDatatype x) {SLTNode* newnode (SLTNode*)malloc(sizeof(SLTNode*));if (newnode NULL){perror(malloc file\n);exit(-1);//开辟空间失败直接退出程序}//使用这个节点newnode-data x;//因为这是一个新的节点我们的下一个数据还没有给它//它现在不需要去存储下一个节点的地址。newnode-next NULL;return newnode; }3.头插 头插我们的头节点每经过一次头插就要改变前面提过我们去使用链表的时候是需要第一个节点的指针的。这个指针如果改变是需要影响到接口外的实参的。需要传二级指针改变 //头插 //头插 void SLTpushfront(SLTNode** pphead, STLDatatype x) {//插入一个数据需要一个新的节点SLTNode* newnode BuySListNode(x);//是有数据说明*pphead不是空。//如果直接改变第一个的地址那么。第二个数据就找不到了。newnode-next *pphead;*pphead newnode; }4.头删 头删需要把第一个节点给释放原来的第二个作为新的头需要对我们的第一个节点进行地址的改变需要传二级指针 void SLTpopfront(SLTNode** pphead) {//删除数据如果没有数据就不去删除assert(*pphead ! NULL);//不止一个数据保存第二个节点的地址SLTNode* newhead (*pphead)-next;free(*pphead);*pphead NULL;//释放老节点拿到新节点*pphead newhead; }5.尾插 不去修改第一个节点可以传二级也可以传一级。 void SLTpushback(SLTNode** pphead, STLDatatype x) {SLTNode* newnode BuySListNode(x);//当没有数据的时候if (*pphead NULL){//对一个地址的修改*pphead newnode;}else{SLTNode* cur *pphead;//下一个是NULL就是尾while (cur-next ! NULL){cur cur-next;}cur-next newnode;} }6.尾删 有可能删除第一个所以需要传二级指针。 //尾删 void SLTpopback(SLTNode** pphead) {assert(*pphead);//当链表中只剩下最后一个节点的时候需要把头指针也制空。if ((*pphead)-next NULL){free(*pphead);*pphead NULL;}else{//找尾SLTNode* cur *pphead;SLTNode* prev *pphead;while (cur-next ! NULL){//cur下一个是NULL说明现在的这个就是尾prev cur;cur cur-next;}//产生野指针的问题确实释放了但是我们cur的前面一个指向的是一个野指针。free(cur);prev-next NULL;} }7.查找 1.查找的区域不可以为空返回一个节点地址。 SLTNode* SLTFind(SLTNode* phead, STLDatatype x) {assert(phead);SLTNode* cur phead;while (cur){if (cur-data x){return cur;}cur cur-next;} }8.在pos之前插入x 1.如果pos是第一个位置相当于头插可以复用前面的代码也可以自己写一个。 2.有可能会改到头所以必须要传二级指针。 void SLTInsert(SLTNode** pphead, SLTNode* pos, STLDatatype x) {SLTNode* newnode BuySListNode(x);if (pos *pphead){SLTpushfront(pphead, x);}else{SLTNode* cur *pphead;while (cur-next!pos){curcur-next;}cur-next newnode;newnode-next pos;} }9.在pos之后插入x void SLTInsertAfter(SLTNode* pos, STLDatatype x) {SLTNode* newnode BuySListNode(x);SLTNode* next pos-next;pos-next newnode;newnode-next next; }10.删除pos位置 // 删除pos位置 void SLTErase(SLTNode** pphead, SLTNode* pos) {if (pos *pphead){//头删SLTpopfront(pphead);}else{SLTNode* cur *pphead;while (cur-next ! pos){cur cur-next;}SLTNode* newhead cur-next-next;free(pos);pos NULL;cur-next newhead;} }11.删除pos的后一个位置 // 删除pos的后一个位置 void SLTEraseAfter(SLTNode* pos) {assert(pos-next ! NULL);if (pos-next-next NULL){free(pos-next);pos-next NULL;pos-next NULL;}else{SLTNode* next pos-next-next;free(pos-next);pos-next NULL;pos-next next;}}12.链表释放 // 单链表的销毁 void SListDestroy(SLTNode** plist) {assert(plist ! NULL);//只需要释放不需要改变,所以一级就可以SLTNode* cur *plist;while (cur-next!NULL){SLTNode* next cur-next;cur-next NULL;free(cur);cur NULL;cur next;SLTprint(cur);}cur-next NULL;free(cur);cur NULL;//原来的节点地址被释放随机值但不是NULL*plist NULL; }三.整体代码 #define _CRT_SECURE_NO_WARNINGS 1#includeSLTNode.h//打印链表 void SLTprint(SLTNode* plist) {//循环遍历不去更改头所以不需要传二级指针//打印之前我们需要注意我们是否有数据打印//说明链表已经没有数值或者还没有节点数据assert(plist!NULL);SLTNode* cur plist;//一个节点的下一个是空就不打印数据了while (cur){printf(%d-, cur-data);//循环的一个条件cur cur-next;}//实参是一个空指针但是存贮空指针的这个空间不是printf(NULL\n);} //创建一个节点 SLTNode* BuySListNode(STLDatatype x) {SLTNode* newnode (SLTNode*)malloc(sizeof(SLTNode*));if (newnode NULL){perror(malloc file\n);exit(-1);//开辟空间失败直接退出程序}//使用这个节点newnode-data x;//因为这是一个新的节点我们的下一个数据还没有给它//它现在不需要去存储下一个节点的地址。newnode-next NULL;return newnode; }//头插 void SLTpushfront(SLTNode** pphead, STLDatatype x) {//插入一个数据需要一个新的节点SLTNode* newnode BuySListNode(x);//是有数据说明*pphead不是空。//如果直接改变第一个的地址那么。第二个数据就找不到了。newnode-next *pphead;*pphead newnode; }//头删 void SLTpopfront(SLTNode** pphead) {//删除数据如果没有数据就不去删除assert(*pphead ! NULL);//不止一个数据保存第二个节点的地址SLTNode* newhead (*pphead)-next;free(*pphead);//释放老节点拿到新节点*pphead newhead; } //尾插 void SLTpushback(SLTNode** pphead, STLDatatype x) {SLTNode* newnode BuySListNode(x);//当没有数据的时候if (*pphead NULL){//对一个地址的修改*pphead newnode;}else{SLTNode* cur *pphead;//下一个是NULL就是尾while (cur-next ! NULL){cur cur-next;}cur-next newnode;} } //尾删 void SLTpopback(SLTNode** pphead) {assert(*pphead);//当链表中只剩下最后一个节点的时候需要把头指针也制空。if ((*pphead)-next NULL){free(*pphead);*pphead NULL;}else{//找尾SLTNode* cur *pphead;SLTNode* prev *pphead;while (cur-next ! NULL){//cur下一个是NULL说明现在的这个就是尾prev cur;cur cur-next;}//产生野指针的问题确实释放了但是我们cur的前面一个指向的是一个野指针。free(cur);prev-next NULL;} }SLTNode* SLTFind(SLTNode* phead, STLDatatype x) {assert(phead);SLTNode* cur phead;while (cur){if (cur-data x){return cur;}cur cur-next;} }// 在pos之前插入x void SLTInsert(SLTNode** pphead, SLTNode* pos, STLDatatype x) {SLTNode* newnode BuySListNode(x);if (pos *pphead){SLTpushfront(pphead, x);}else{SLTNode* cur *pphead;while (cur-next!pos){curcur-next;}cur-next newnode;newnode-next pos;} }// 在pos以后插入x void SLTInsertAfter(SLTNode* pos, STLDatatype x) {SLTNode* newnode BuySListNode(x);SLTNode* next pos-next;pos-next newnode;newnode-next next; }// 删除pos位置 void SLTErase(SLTNode** pphead, SLTNode* pos) {if (pos *pphead){//头删SLTpopfront(pphead);}else{SLTNode* cur *pphead;while (cur-next ! pos){cur cur-next;}SLTNode* newhead cur-next-next;free(pos);pos NULL;cur-next newhead;} }// 删除pos的后一个位置 void SLTEraseAfter(SLTNode* pos) {assert(pos-next ! NULL);if (pos-next-next NULL){free(pos-next);pos-next NULL;pos-next NULL;}else{SLTNode* next pos-next-next;free(pos-next);pos-next NULL;pos-next next;}}// 单链表的销毁 void SListDestroy(SLTNode** plist) {assert(plist ! NULL);//只需要释放不需要改变,所以一级就可以SLTNode* cur *plist;while (cur-next!NULL){SLTNode* next cur-next;cur-next NULL;free(cur);cur NULL;cur next;SLTprint(cur);}cur-next NULL;free(cur);cur NULL;//原来的节点地址被释放随机值但不是NULL*plist NULL; }
http://wiki.neutronadmin.com/news/276818/

相关文章:

  • 博客网站的建设流程wordpress 手机模版
  • 网站排名怎么上去wordpress自动保存远程图片
  • 杭州的设计网站建设icp备案网站更名
  • 网站换空间会影响排名吗制作相册影集app
  • 集团网站建设定制网站建设高端制造股十大龙头
  • 国内做外单的网站有哪些网站建设成本多少
  • 网站后台管理系统摘要怎么写深圳福田做网站公司
  • 网站建设顶层设计怎么做二维码进网站
  • 乐清网站制作公司哪家好西安网站价格
  • 做网站要有策划么网建网络科技有限公司
  • 成都行业网站建设那里好开发app需要什么技术人才
  • 昆山企业网站建设公司外国购物网站大全
  • 贵阳网站建设q479185700惠网站中flash怎么做
  • wordpress企业站模板下载百度站长如何验证网站
  • 个人接单做网站挣钱不好123上网从这里开始
  • 国税网站建设管理沃尔玛网上商城官网
  • 网站公司一站式服务杭州本地网站
  • 网站必须做诚信认证吗wordpress主题付费
  • 天津做网站比较好的公司河南网络优化服务
  • 哈尔滨关键词优化价格英文seo如何优化
  • 临清网站制作郑州教育网站建设
  • 工厂型企业做网站做网站做的好的公司
  • 个人网站做商城会怎样汽车网站建设的目的
  • vps建设网站别人访问不了公司注册资金最低多少
  • 原网站开发新功能seo全网营销公司
  • 网站flash引导页下载个人app怎么做
  • 微信电商网站开发为企业设计网站
  • 专业网站建设效果显著ps做阿里网站分辨率设置
  • 影楼网站源码自助建站平台哪家好
  • 做众筹网站怎么赚钱淘客网站怎么建设