设为首页 加入收藏

TOP

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

 

  于是我们可以继续写代码了:

  int main(){

  //创建上图的链表

  node *head;//一个头指针。用来指向这个链表的第一个节点

  node *f=new node;//对应上图第一个节点first node,这种奇葩命名法不是我要让你们学会的,另我使用了new而不是malloc主要是因为惰性

  node *s=new node;//对应上图第二个节点second node

  node *t=new node;//对应上图第三个节点third node

  f->data=8;//第一个node的值

  f->next=s;//第一个节点next指针指向第二个节点

  s->data=7;//第二个node的值

  s->next=t;//第二个节点next指针指向第三个节点

  t->data=9;//第三个节点值

  t->next=NULL;//从上图得知第三个节点后没有节点了,所以指向NULL,通常称这个节点为尾节点

  head=f;//头指针指向第一个节点,至于为什么前面已经说了//打印这个链表里面储存的元素

  std::cout<<"链表数据:"<<"\n";

  node *print_ptr=head;//为什么这里要new一个print_ptr 因为我们可能还要利用head进行其他操作,如果直接用head进行下面的操作,就意味着head指向的位置已经改变了

  while(print_ptr!=NULL){

  std::cout<data<<"\n";//通过头结点迭代打印每个节点的值

  print_ptr=print_ptr->next;//更新,让当前指针指向下一个节点

  }

  //输出节点的个数,虽然我们已经知道了是3个

  node *length_ptr=head;//同上面的

  print_ptrint k=0;

  while(length_ptr!=NULL){

  k++;length_ptr=length_ptr->next;

  }

  std::cout<<"链表节点个数:"<<"\n"<

  node *ins_node=new node;//为即将插入的节点从堆上分配点内存

  ins_node->data=14;//赋值

  ins_node->next=s;//让新节点的next指向第二个节点

  f->next=ins_node;//然后让第一个节点的next指向新节点,这就完成了插入//删除之前插入的节点

  ins_node=f->next;//让第一个节点next指向新插入的节点,这里你可能会感到疑惑,我建议你画图或者再看看上面的图就能理解,当然你也可以看下面

  f->next=ins_node->next;//第一个节点的next指向新节点的next,因为新节点的next相当于指向了第二个节点,所以这里也等价于第一个节点指向第二个节点f->next=f-next->next

  system("pause");

  }

  上面就完成了使用尾插法创建的一个链表及其简单操作包括创建/输出/插入/删除,不过如你所见它也存在许多不足,比如命名的拙计,new后没有delete,以及全部在main中执行没有考虑使用函数等等缺陷,不过这没关系,因为我们会一步步修改最终让他成为一个不错的链表

          

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

评论

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