带哨兵的双向链表
来源:互联网 发布:linux shell执行exe 编辑:程序博客网 时间:2024/06/05 05:32
//带哨兵的双向链表#include<stdio.h>#include<stdlib.h>typedef struct NODE{ struct NODE*prev;char key;struct NODE*next;}NODE;NODE*NIL=NULL;//双链表L的哨兵结点。NODE*search(char key)//每次循环省略对p!=NULL的检查{/*查找双链表L中第一个关键字为key的元素,并返回指向该元素的指针,不存在key则返回NULL。*/ NODE*p=NIL->next;NIL->key=key; while(p->key!=key) p=p->next; if(p==NIL) {puts("This node doesn't exist.");return NULL;} else return p;}void insert(NODE*p)//将p插入到L首端{ NIL->next->prev=p; p->next=NIL->next; NIL->next=p; p->prev=NIL;}void delete(NODE*p)//删除L中p指向的元素{ if(!p) return; p->prev->next=p->next; p->next->prev=p->prev; free(p);}NODE* createnode(char key){ NODE*p=(NODE*)malloc(sizeof(NODE)); if(!p){ puts("memory exhausted.");exit(1); } p->key=key; return p;}void traverse(){ NODE*p; for(p=NIL->next;p!=NIL;p=p->next) putchar(p->key); putchar(' ');putchar(' '); for(p=NIL->prev;p!=NIL;p=p->prev) putchar(p->key); putchar('\n');}int main(void){ //创建一个空链表 NIL=createnode(('#')); NIL->next=NIL->prev=NIL; traverse(); insert(createnode('a')); insert(createnode('b')); insert(createnode('c')); traverse(); delete(search('a')); traverse(); insert(createnode('d')); insert(createnode('e')); insert(createnode('f')); traverse(); delete(search('1')); delete(search('d')); traverse(); delete(search('f')); traverse(); delete(search('b')); delete(search('c')); traverse(); delete(search('e')); delete(search('e')); traverse(); return 0;}
0 0
- 算法----带哨兵的双向链表
- 带哨兵的双向链表
- 不带哨兵的双向链表
- 带哨兵的环形双向链表
- 【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表
- 数据结构--双向带哨兵的循环链表
- 带有哨兵的双向循环链表
- 带哨兵的双向循环链表的C语言实现
- 算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
- 使用带sentinel哨兵的双向链表实现栈和队列
- C++实现有哨兵的双向循环链表
- 10.2-5 带哨兵的单向循环链表
- 带哨兵与不带哨兵的插入排序
- 带哨兵的插入排序
- 带哨兵的直接插入排序法
- 带哨兵节点和不带哨兵节点的单链表操作的对比
- 带表 双向循环链表的简单操作
- 带表头节点的双向循环链表编程
- 安卓学习笔记(一)自定义控件1
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
- 10.1-5 双端队列deque
- Zookeeper监控的作用
- ActiveMQ(2) 安装
- 带哨兵的双向链表
- FZU 2087 统计树边
- 如何使用ubuntu14.04中的分区工具
- GDB十分钟教程
- python Image模块安装
- 重载,重定义与隐藏
- C++与Matlab的混合编程
- 不带哨兵的双向链表
- Android之——ContentProvider操作XML