单链表的增加和删除,数据结构单链表的增删改查

  单链表的增加和删除,数据结构单链表的增删改查

  伊德斯干货盘点

  @TOC

  1.链表的概念

  一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。

  2.链表优点

  1.空间上按需所给空间

  2.在头部和中间插入时,不需要挪动数据

  二~我爱你~单链表的实现

  1.函数的定义和结构体的创建——名单h

  #包括标准视频

  #包括标准库

  #include assert.h包含断言

  typedef int slistdatatype:

  typedef结构slistnode类型定义结构滑动节点

  slistdatatype数据

  结构s*下一步;

  } slistnode

  void stack push back(slist node * * PP head,slist data type x);

  void slist print(slist node * phead);

  void堆栈弹出返回(slist节点* * phead);

  void stack push Fran(slist node * * phe ad,slist data type x);

  void stack pop front(slist node * * phead);

  slist node * slist ind(slist node * ph EAD,slist ATA type x);

  S7-1200可编程控制器:

  参见slistnode**pphead,slistnode * pos

  2.函数的调用前334年

  #包括list.h

  int main()

  slistnode * phead=null

  stackpushback( phead,1);//尾插

  堆栈推回(phead,2);

  堆栈推回(phead,3);

  stackpushback( phead,4);

  slist打印(phead);//打印

  堆栈弹出返回(phead);//尾删

  slist打印(phead);

  堆栈pushfran(phead,5);//头插

  slist打印(phead);

  堆栈弹出前端(phead);//头删

  slist打印(phead);

  slist node * pos 1=slist ind(ph head,2);//查找位置

  slistinserafter(phead,位置1.6);//指定插

  slist打印(phead);

  slist node * pos 2=slist ind(ph head,2);

  滑动aseafter(phead,位置2);//指定删

  slist打印(phead);

  返回0;

  }

  3.二级指针问题

  此时发现传过去的佩哈德,接收是二级指针,传址调用才能真正改变主函数中菲德指针

  但比如打印或者查找位置并没有改变菲德指针,所以也就不用传地址了

  4.单链表的接口实现

  void堆栈推回(slistnode * * pphead,slistdatatype x/)尾插

  slist节点* new节点=(slist节点*)malloc(sizeof节点));

  if (newnode!=空)

  newnode- data=x:

  newnode- next=NULL:

  if(* pphead==null)/(s)为空时

  * pphead=newnode

  else//不为空时

  slistnode * tail=* pphead

  而(尾部-下一个!=null//遍历到最后一个节点

  尾部=尾部-下一个:

  尾部-下一个=新节点:

  }

  参见堆栈弹出返回(滑动节点* * pphead/)尾删

  if(* pphead==null)/(s)为空

  返回;

  else if ((*pphead)-下一个==null/)只有一个节点时

  自由(* PP head);

  *pphead=NULL:

  else//正常情况下要把尾节点免费的尾节点的前一个节点的指针置为空值

  slistnode* prev=NULL://预测指向前一个节点

  slistnode * tail=* pphead

  而(尾部-下一个!=空)

  上一次=尾部:

  尾部=尾部-下一个:

  自由(尾部);

  尾部=空:

  prev- next=NULL:

  }

  void stack push Fran(slist node * * PP head,slistdatatype x/)头插

  slist节点* new节点=(slist节点*)malloc(sizeof节点));

  newnode- data=x:

  newnode- next=NULL:

  new node-next=* PP head;

  * pphead=newnode

  }

  参见堆栈弹出前端(滑动节点* * pphead/)头删

  if(* pphead==null)/(s)若为空

  返回;

  其他语句

  slist节点* new节点=(slist节点*)malloc(sizeof节点));

  newnode=(*pphead)-下一步;/*pphead的后一个节点作为*pphead

  自由(* PP head);

  *pphead=NULL:

  * pphead=newnode

  }

  5.查找位置

  slist node * slist ind(slist node * phead,slist atatype x)/(s查找位置(返回该位置,不是下标)

  slistnode * cur=phead

  而(当前值!=空)

  if (cur- data==x)

  返回当前值;//如果找到了则返回该位置

  cur=cur-next;

  返回NULL://没找到直接返回空值

  }

  6.指定插

  请参见slistnode** pphead、slistnode* pos、slist数据类型x//指定插

  断言(pos);//位置为找到的位置,x是要插入的值

  slist节点* new节点=(slist节点*)malloc(sizeof节点));

  newnode- data=x:

  newnode- next=NULL:

  newnode- next=pos- next://先将新节点与位置(p)后面的节点连接

  pos-next=新节点;//再将位置(p)与新节点连接

  }

  这里一定不要先将位置(p)与x个先连接,否则会使下一个位置找不到2

  7.指定删

  参见slistnode** pphead,slistnode * pos指定删

  断言(位置);//pos可以传递NULL。

  slistnode * prev=* pphead

  while(上一页-下一页!=pos)//prev是pos的上一个节点。

  prev=prev-next;

  prev-next=pos-next;//连接pos的前一个节点和后一个节点

  免费(pos);

  pos=NULL

  }

  void slist print(slist node * phead)//print

  slistnode * cur=phead

  而(cur!=空)

  printf(%d-,cur-data);

  cur=cur-next;

  printf( NULL \ n );

  }

  。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: