Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1478426
  • 博文数量: 148
  • 博客积分: 2234
  • 博客等级: 大尉
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 21:34
个人简介

未来很长。

文章存档

2017年(7)

2016年(4)

2015年(1)

2014年(6)

2013年(31)

2012年(99)

分类: C/C++

2012-05-27 21:16:51

1、在带有头结点双向循环链表中第1个数据域内容为x的结点右边插入一个数据信息为item的新结点,如下:

点击(此处)折叠或打开

  1. typedef struct node{
  2.     int data;
  3.     struct node *llink, *rlink;
  4. }DNode, *DLinkList;

  5. int insertElem( DLinkList list, int x, int item ){
  6.     DLinkList p, q;
  7.     q = list->rlink; //首先将q指向头结点后面的那个结点
  8.     while( q != list && q->data != x ){ //寻找第一个满足条件的结点
  9.         q = q->rlink;
  10.     }
  11.     if( q == list ){ //如果不存在满足插入条件的结点,则返回
  12.         printf( "there is no x element in the list" );
  13.         return -1;
  14.     }

  15.     p = ( DLinkList )malloc( sizeof( DNode ) ); //申请一个新的结点
  16.     if( p == NULL ){ //判断内存分配是否成功
  17.         printf( "malloc error!" );
  18.         return -1;
  19.     }
  20.     p->data = item;
  21.     p->llink = q; //插入新的结点
  22.     p->rlink = q->rlink;
  23.     q->rlink->llink = p;
  24.     q->rlink = p;

  25.     return 1;
  26. }

2. 从带有头结点双向循环链表中删除第1个数据域内容为x的结点:


 

点击(此处)折叠或打开

  1. int deleteElem( DLinkList list, int x ){
  2.     DLinkList q;
  3.     q = list->rlink; //首先q指向头结点后面的那个结点
  4.     while( q != list && q->data != x ){ //找到要删除的结点
  5.         q = q->rlink;
  6.     }
  7.     if( q == list ){ //如果不存在满足条件的结点,返回-1
  8.         printf( "there is no matched element in the list" );
  9.         return -1;
  10.     }

  11.     q->llink->rlink = q->rlink; //删除结点
  12.     q->rlink->llink = q->llink;
  13.     free( q ); //释放结点的内存空间
  14.     return 1; //删除成功,返回1
  15. }


 

 


 

阅读(3226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~