设为首页 加入收藏

TOP

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

 

  双向链表实现

  再想想上面图片,下面要介绍的就是双向链表,双向链表与单项链表的区别就在于它有一个指向前一个节点的指针,于是我们就应该定义这样的结构体

  typedef struct NODE

  {

  int data;

  struct NODE *next;

  struct NODE *pre;

  }node;

  由于双向链表不可避免有些操作需要从后向前遍历,于是我们就应该添加一个概念,尾指针,也就是指向尾节点的指针,如下就实现了一个双向链表,它有三个节点abc,并有两种输出方式

  #include

  typedef struct NODE

  {

  int data;

  struct NODE *next;

  struct NODE *pre;

  }node;

  int main(){

  node *a=new node,*b=new node,*c=new node;

  node *head=a;

  node *tail=c;

  a->data=9;

  a->next=b;

  a->pre=NULL;

  b->data=17;

  b->next=c;

  b->pre=a;

  c->data=6;

  c->next=NULL;

  c->pre=b;

  //输出

  /*node *print_head=head;

  while(print_head!=NULL){

  std::cout<data<<"\n";

  print_head=print_head->next;

  }*/

  /*node *print_head=tail;

  while(print_head!=NULL){

  std::cout<data<<"\n";

  print_head=print_head->pre;

  }*/

  system("pause");

  }

  双向链表的难点不是创建输出而是插入与删除,我没有制作图片,所以这需要读者认真去思考一下,建议画图,也很容易理解,下面代码是在上面创建了abc的基础上实现的在ab间插入一个k,然后再删除它

  //插入

  node *k=new node;

  k->data=698;

  k->pre=a;

  k->next=a->next;

  k->next->pre=a;

  a->next=k;

  //删除

  k->pre->next=k->next;

  k->next->pre=k->pre;

  循环单链表 循环链表我不考虑讲,因为它就是把尾巴节点指向了头节点从而形成一个环,所以说循环链表不叫loop linked list而叫circular linked list

          

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

评论

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