加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

带哨兵的双向循环链表的C语言达成

发布时间:2021-12-13 12:51:48 所属栏目:教程 来源:互联网
导读:定义 双向链表,也叫双链表,是链表的一种。它的每个数据节点含有两个指针,分别指向前驱和后继。在带哨兵的双向循环链表中,我们可以方便的访问任意节点的前驱节点和后继节点。 实现 下面的程序能够对双向链表实现元素的查找、插入、删除等操作,其中main函
定义
双向链表,也叫双链表,是链表的一种。它的每个数据节点含有两个指针,分别指向前驱和后继。在带哨兵的双向循环链表中,我们可以方便的访问任意节点的前驱节点和后继节点。
 
实现
下面的程序能够对双向链表实现元素的查找、插入、删除等操作,其中main函数为测试函数。
 
# include <stdio.h>
# include <stdlib.h>
# define M 100
 
typedef struct lnode {
 int key;
 struct lnode * prev;
 struct lnode * next;
} lnode;
lnode * nil;
 
lnode * listSearch(int k);
void listInsert(int k);
void listDelete(lnode * x);
void listShow(void);
 
int main(void)
{
 nil = (lnode * ) malloc(sizeof(lnode));
 nil->key = 0;
 nil->prev = nil;
 nil->next = nil;
 listInsert(2);
 listInsert(4);
 listInsert(6);
 listInsert(8);
 listInsert(10);
 listShow();
 putchar('n');
 listDelete(listSearch(6));
 listShow();
 return 0;
}
lnode * listSearch(int k)
{
 lnode * x;
 x = nil->next;
 while(x != nil && x->key != k) {
  x = x->next;
 }
 return x;
}
void listInsert(int k)
{
 lnode * x;
 x = (lnode * ) malloc(sizeof(lnode));
 x->key = k;
 x->next = nil->next;
 x->prev = nil;
 nil->next->prev = x;
 nil->next = x;
}
void listDelete(lnode * x)
{
 x->next->prev = x->prev;
 x->prev->next = x->next;
 free(x);
}
void listShow(void)
{
 lnode * x;
 x = nil->next;
 while(x != nil) {
  printf("%d ", x->key);
  x = x->next;
 }
}
 
上面的程序中,main函数为测试函数,且均省略了对上溢和下溢的检验!

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读