代碼:
#include#include typedef char ElemType; typedef struct DNode { ElemType data; struct DNode *prior; struct DNode *next; }DLinkList; //初始化 void InitList(DLinkList * &L) { L=(DLinkList *)malloc(sizeof(DLinkList)); L->prior=L->next=NULL; } //銷毀雙鏈表 void DestroyList(DLinkList *L) { DLinkList *p=L,*q=p->next; while(q!=NULL) { free(p); p=q; q=p->next; } free(p); } //判斷鏈表是否為空 bool ListEmpty(DLinkList *L) { return(L->next==NULL); } //雙鏈表的長度 int ListLength(DLinkList *L) { DLinkList *p=L; int i=0; while(p->next!=NULL) { i++; p=p->next; } return i; } //輸出雙鏈表 void DispList(DLinkList *L) { DLinkList *p=L->next; while(p!=NULL) { printf(" %c ",p->data); p=p->next; } printf("\n"); } //求雙鏈表中的某個元素的值 bool GetElem(DLinkList *L,int i,ElemType &e) { int j=0; DLinkList *p=L; while(jnext; } if(p==NULL) return false; else { e=p->data; return true; } } //按元素值查找 int LocateElem(DLinkList *L,ElemType e) { int n=1; DLinkList *p=L->next; while(p!=NULL && p->data!=e) { n++; p=p->next; } if(p==NULL) return 0; else return n; } //插入元素 bool ListInsert(DLinkList * &L,int i,ElemType e) { int j=0; DLinkList *p=L,*s; while(j next; } if(p==NULL) return false; else { s=(DLinkList *)malloc(sizeof(DLinkList)); s->data=e; s->next=p->next; if(p->next!=NULL) p->next->prior=s; s->prior=p; p->next=s; return true; } } //刪除數據元素 bool ListDelete(DLinkList * &L,int i,ElemType &e) { int j=0; DLinkList *p=L,*q; while(j next; } if(p==NULL) return false; else { q=p->next; if(q==NULL) return false; e=q->data; p->next=q->next; if(p->next!=NULL) p->next->prior=p; free(q); return true; } } void main() { DLinkList *h; ElemType e; printf("雙鏈表的基本運算如下:\n"); printf(" (1)初始化雙鏈表h\n"); InitList(h); printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n"); ListInsert(h,1,'a'); ListInsert(h,2,'b'); ListInsert(h,3,'c'); ListInsert(h,4,'d'); ListInsert(h,5,'e'); printf(" (3)輸出雙鏈表h:"); DispList(h); printf(" (4)雙鏈表的長度=%d\n",ListLength(h)); printf(" (5)雙鏈表h為%s\n",(ListLength(h)?"空":"非空")); GetElem(h,3,e); printf(" (6)雙鏈表h的第三個元素=%c\n",e); printf(" (7)元素a的位置=%d\n",LocateElem(h,'a')); printf(" (8)在第四個元素上插入f元素\n"); ListInsert(h,4,'f'); printf(" (9)輸出雙鏈表h:"); DispList(h); printf(" (10)刪除h的第三個元素\n"); ListDelete(h,3,e); printf(" (11)輸出雙鏈表h:"); DispList(h); printf(" (12)釋放雙鏈表h\n"); DestroyList(h); }