设为首页 加入收藏

TOP

带哨兵的双向循环链表的C语言实现
2014-11-24 03:17:23 来源: 作者: 【 】 浏览:1
Tags:哨兵 双向 循环 语言 实现

标题:带哨兵的双向循环链表的C语言实现


内容:链表是一种基本的链式存储结构,带哨兵的双向循环链表更是一种方便的数据结构。


作者:MilkCu


双向链表,也叫双链表,是链表的一种。它的每个数据节点含有两个指针,分别指向前驱和后继。在带哨兵的双向循环链表中,我们可以方便的访问任意节点的前驱节点和后继节点。


下面的程序能够对双向链表实现元素的查找、插入、删除等操作,其中main函数为测试函数。


# include
# include
# 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函数为测试函数,且均省略了对上溢和下溢的检验!


(全文完)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇队列的多种C语言实现 下一篇栈的多种C语言实现

评论

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

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)