代码:
#include<stdio.h> #include<malloc.h> 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(j<i && p!=NULL) { j++; p=p->next; } 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<i-1 && p!=NULL) { j++; p=p->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<i-1 && p!=NULL) { j++; p=p->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); }
原文:http://blog.csdn.net/u010286751/article/details/21343439