Doubly linked list
来源:互联网 发布:资金流向数据 编辑:程序博客网 时间:2024/05/16 01:27
DuLinkList.c
typedef struct DuLNode{ElemType data;struct DuLNode *prior , *next;}DuLNode,*DuLinkList;Status InitList(DuLinkList *L){*L = (DuLinkList)malloc(sizeof(DuLNode));if(*L){(*L)->next = (*L)->prior = (*L);return OK;}else{return OVERFLOW;}}Status DestroyList(DuLinkList *L){DuLinkList q , p = (*L)->next;while(p != *L){q = p->next;free(p);p = q;}free(*L);*L = NULL;return OK;}Status ClearList(DuLinkList L){DuLinkList q , p = L->next;while(p != L){q = p->next;free(p);p = q;}L->next = L->prior = L;return OK;}Status ListEmpty(DuLinkList L){if(L->next == L && L->prior == L){return TRUE;}else{return FALSE;}}int ListLength(DuLinkList L){int i = 0;DuLinkList p = L->next;while(p != L){i++;p = p->next;}return i;}Status GetElem(DuLinkList L , int i , ElemType *e){int j = 1;DuLinkList p = L->next;while(p != L && j < i){j++;p = p->next;}if(p == L || j > i){return ERROR;}else{*e = p->data;return OK;}}int LocateElem(DuLinkList L , ElemType e , Status(*compare)(ElemType , ElemType)){int i = 0;DuLinkList p = L->next;while(p != L){i++;if(compare(e , p->data)){return i;}p = p->next;}return 0;}Status PriorElem(DuLinkList L , ElemType cur_e , ElemType *pre_e){DuLinkList p = L->next->next;while(p != L){if(p->data == cur_e){*pre_e = p->prior->data;return OK;}p = p->next;}return FALSE;}Status NextElem(DuLinkList L , ElemType cur_e , ElemType *next_e){DuLinkList p = L->next->next;while(p != L){if(p->prior->data == cur_e){*next_e = p->data;return TRUE;}p = p->next;}return FALSE;}DuLinkList GetElemP(DuLinkList L , int i){int j;DuLinkList p = L;for(j = 1;j<=i;j++){p = p->next;}return p;}Status ListInsert(DuLinkList L , int i , ElemType e){DuLinkList p , s;if( i < 1 || i > ListLength(L) + 1){return ERROR;}p = GetElemP(L , i - 1);if(! p){return ERROR;}s = (DuLinkList)malloc(sizeof(DuLNode));s->data = e;s->prior = p;s->next = p->next;p->next->prior = s;p->next = s;return OK;}Status ListDelete(DuLinkList L , int i , ElemType *e){DuLinkList p;if(i < 1 || i > ListLength(L)){return ERROR;}p = GetElemP(L , i);if(!p){return ERROR;}*e = p->data;p->prior->next = p->next;p->next->prior = p->prior;free(p);return OK;}void ListTraverse(DuLinkList L , void(* visit)(ElemType)){DuLinkList p = L->next;while(p != L){visit(p->data);p = p->next;}printf("\n");}void ListTraverseBack(DuLinkList L , void(*visit)(ElemType)){DuLinkList p = L->prior;while(p != L){visit(p->data);p = p->prior;}printf("\n");}
DuLinkList_main.c
#include"header.c" typedef int ElemType; #include"DuLinkList.c" Status compare(ElemType c1,ElemType c2) { if(c1==c2) return TRUE; else return FALSE; } void vd(ElemType c) { printf("%d ",c); } void main() { DuLinkList L; int i,n; Status j; ElemType e; InitList(&L); for(i=1;i<=5;i++) ListInsert(L,i,i); printf("positive squence output list:"); ListTraverse(L,vd); printf("reversed squence output list:"); ListTraverseBack(L,vd); n=2; ListDelete(L,n,&e); printf("Delete the %d node value is %d , the rest are:",n,e); ListTraverse(L,vd); printf("The number of list elements are %d\n",ListLength(L)); printf("Is the list empty:%d (1:yes 0: no) \n ",ListEmpty(L)); ClearList(L); printf("After clear list , is list empty:%d (1:yes 0:no)\n",ListEmpty(L)); for(i=1;i<=5;i++) ListInsert(L,i,i); ListTraverse(L,vd); n=3; j=GetElem(L,n,&e); if(j) printf("The %d element is %d:\n",n,e); else printf("There are no %d element.\n",n); n=4; i=LocateElem(L,n,compare); if(i) printf("The element which are equal to %d is the %d element\n",n,i); else printf("There are no element equal to %d\n",n); j=PriorElem(L,n,&e); if(j) printf("%d's previous element is %d \n",n,e); else printf("There are no %d's previous element\n",n); j=NextElem(L,n,&e); if(j) printf("%d's next element is %d\n",n,e); else printf("There are no %d's next element\n",n); DestroyList(&L); }
- Doubly linked list
- Doubly Linked List
- Linked List/Singly-Linked List/Doubly-Linked List
- HWK:A doubly linked list using class
- (转)A Memory-Efficient Doubly Linked List
- 【Hackerrank】Reverse a doubly linked list
- A Memory-Efficient Doubly Linked List
- Convert BST to Sorted Doubly-Linked List
- 双向链表(Doubly Linked List)
- 链表ALDS1-3-C:Doubly Linked List
- 双链表基本操作 doubly linked list
- 第四章 ALDS1_3_C:Doubly Linked List 链表
- XOR Linked List – A Memory Efficient Doubly Linked List
- Linked List {singly linked list -> doubly linked list -> circular linked list}
- Reverse a doubly linked list in O(1) time
- Circular Doubly Linked List 双向循环链表 C++ 例子
- Convert Binary Search Tree (BST) to Sorted Doubly-Linked List
- 【Hackerrank】Insert a node into a sorted doubly linked list
- android surfaceflinger研究----SurfaceFlinger loop .
- 中断方式与轮询方式比较
- HeroKu 的架构设计
- 一看就知道自己差在哪
- Linux framebuffer ---double buffer
- Doubly linked list
- 嵌入式arm linux环境中gdb+gdbserver调试
- android jni opengl
- 【个人感想】计算机专业要做的事情【转自山科大大牛高玉嵩】
- 谈谈超平面(hyperplane)
- ubuntu 之开机自动挂在NTFS 解决 chmod 对 NTFS 失效的问题。
- oracle 11g RAC 的一些基本概念(二)
- poj 1141 brackets sequence
- 对话Linus Torvalds:大多黑客甚至连指针都未理解