设为首页 加入收藏

TOP

数据结构之C语言链表实现(九)
2014-02-08 12:44:39 来源: 作者: 【 】 浏览:1150
Tags:数据结构 语言 实现

 

  可能你关于上面插入与删除你没有搞清楚,这里我再特意讲一下

  上图我们需要把储存14这个数据的node插入到一和二之间,于是我们就需要更改next指针,所以之前f->next=s;就不能用了,

  你可能会想到让第一个指向新节点,然后再让新节点指向第三个,如:

  f->next=ins_node;

  ins_node->next=f->next;

  事实通常证明第一感觉是错误的,仔细看看上面代码你就会发现加入f->next=ins_node,那么第二条就相当于ins_node->next=ins_node;它指向了自己!所以我们需要反过来思考,先让新节点指向第二个,然后再让第一个指向新节点,就如上面的代码了,至于删除我没有弄出图片,我只是简单讲一下,删除是直接让第一个节点的next指向需要删除的节点,然后再让第一个节点的next指向需要删除的节点的next,你可能会思考为什么不直接让第一个节点next指向第二个呢 这个疑问你可以自己解答比较好

  动态单链表实现

  到这里一个简单的链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存的数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入的数据以链式结构储存,也就是动态链表

  #include

  struct node

  {

  int data;

  struct node *next;

  };

  node *create_linklist();

  void print_linklist(node *head);

  node *create_linklist(){

  node *head=new node;

  node *new_node,*current;//一个新节点作为当前节点

  current=head;//头结点复制给当前节点

  int k;

  printf("输入节点个数:");

  scanf("%d",&k);

  for (int i = 0; i < k; ++i)

  {

  new_node=new node;

  if(i==0)//这里也就是创建第一个节点的情况

  {

  head=new_node;//把头指针指向第一个节点

  }

  printf("输入节点数据:");

  scanf("%d",&new_node->data);

  current->next=new_node;//注意这里由于创建了一个新节点,而当前节点还是开始的head的那个位置,所以就需要更新一下,让当前节点next等于new_node的位置

  new_node->next=NULL;//当前节点的next=NULL表示当前节点就是最后一个节点了

  current=new_node;//然后把new_node节点复制给当前节点,以便继续后面的节点添加

  }

  return head;

  }

  void print_linklist(node *head)//参数传入一个头指针用来指向第一个节点

  {

  node *phead=head;

  while(phead!=NULL)

  {

  printf("%d", phead->data);

  phead=phead->next;

  }

  }

  int main(){

  node *h=create_linklist();

  print_linklist(h);

  system("pause");

  }

          

首页 上一页 6 7 8 9 10 11 12 下一页 尾页 9/13/13
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C指针原理之内存管理与控制 下一篇C语言字符串操作总结大全

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: