10.2-5 带哨兵的单向循环链表
2015-08-15 15:53
447 查看
//带哨兵的单向循环链表。NIL的next是头结点,尾结点的next是NIL #include<stdio.h> #include<stdlib.h> typedef struct NODE{ char key;struct NODE* next; }NODE; NODE *NIL=NULL; void insert(NODE* p) {//插入到头结点 p->next=NIL->next; NIL->next=p; } void delete(NODE* p) {//删除p结点,若p不在链表中,会死循环 NODE* pre=NIL; while(pre->next!=p){pre=pre->next;} pre->next=p->next;free(p); } NODE* search(char key) { NODE*p=NIL->next;NIL->key=key; while(p->key!=key) p=p->next; return p==NIL?NULL: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('\n'); } int main(void) { //初始化NIL链表 NIL=createnode('?');NIL->next=NIL; traverse(); NODE*p=search('a'); if(p) putchar(p->key); insert(createnode('z')); insert(createnode('a')); p=search('a'); if(p) putchar(p->key); insert(createnode('b')); traverse(); delete(search('a')); delete(search('z')); delete(search('b')); traverse(); return 0; }
相关文章推荐
- java算法导论之FloydWarshall算法实现代码
- Red-Black Tree 的Java实现
- 逆序对
- 算法导论之堆
- LCS 最长公共子序列
- 使用Java完成《算法导论》习题2.2-2
- 使用Java完成《算法导论》习题2.3-2
- 使用Java完成《算法导论》习题2.3-4
- 使用Java完成《算法导论》习题2.3-5
- 使用Java完成《算法导论》习题2.3-6
- 使用Java完成《算法导论》习题2.3-7
- 快速排序个人理解
- 笔记一(算法基础)
- Chapter2 Getting Started
- Chapter3 Growth of Functions
- 插入排序和归并排序
- 第2章 算法入门
- 编程资源共享导航(更新)
- 算法导论 第15章 动态规划之钢条切割
- Asymptotic Notation and Recurrences