《数据结构实验 建立双向循环链表以及插入删除操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验 建立双向循环链表以及插入删除操作.docx(3页珍藏版)》请在三一办公上搜索。
1、数据结构实验 建立双向循环链表以及插入删除操作 实验一 要求:建立双向循环链表 实现链表的插入、删除 运行程序点此处 Demo_1.exe 实验程序源代码: #include stdafx.h #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; /双向循环链表的存储结构 typedef struct DuLNode int data; int Length; struct DuLNode *prior; struct DuLNode *next; DuLNode,*DuLi
2、nkList; /构建一个空的双向循环链表 void InitList(DuLNode *p) *p=(DuLNode *)malloc(sizeof(DuLNode); if(*p) (*p)-next=(*p)-prior=*p; (*p)-Length=0; else exit(OVERFLOW); /双向循环链表的创建 void Create(DuLinkList &L,int n) /输入n个元素的值,建立带头结点的双线循环链表L DuLinkList p=L,q; int i; for(i=1;idata); p-next =q; q-prior=p; q-next=L; L-pr
3、ior =q; p=q; L-Length +; /查找元素的位置 DuLinkList GetElemP(DuLinkList h,int i) int j; DuLinkList p=h; for(j=1;jnext ; return p; /结点的插入 status Listinsert(DuLNode *m,int i,int e) /在带头结点的双链循环线性表L中第i个位置之前插入元素e,i的合法值为1i表长 DuLinkList p,q; if(i(m-Length) / i值不合法 return ERROR; p=GetElemP(m,i); if(!p) return ERRO
4、R; q=(DuLinkList)malloc(sizeof(DuLNode); if(!q) return OVERFLOW; q-data=e; q-prior=p-prior; p-prior-next=q; q-next=p; p-prior=q; m-Length+; printf(您在双向循环链表第%d个位置之前插入了一结点元素:%dn,i,e); return OK; /结点的删除 status ListDelete(DuLinkList L,int i) /删除带头结点的双链循环线性表L的第i个元素,i的合法值为1i表长 DuLinkList p; if(iprior-next
5、=p-next; p-next-prior=p-prior; L-Length -; printf(删除了双线循环链表中第%d个结点,元素值为:%dn,i,p-data); free(p); return OK; /结点的输出 void Display( DuLinkList L) DuLinkList p; printf(双向循环链表中的结点的数据为:); for(p=L-next ;p-next !=L;) printf(%d,p-data); printf( & ); p=p-next ; printf(%dn,p-data ); /主函数实现链表的创建,插入,删除等操作 void ma
6、in DuLinkList L; int n,i; InitList(&L) ; printf(你想创建几个循环节点就输入几就行啦,请输入:); scanf(%d,&n); Create(L,n); Listinsert(L,3,3);/结点的插入 printf(您想删除哪个结点呢?); scanf(%d,&i); printf(您确定删除此结点吗?1:YES 2:NO); if(i=2) printf(您想删除哪个结点呢?); scanf(%d,&i); ListDelete(L,i); else ListDelete(L,i);/结点的删除 Display(L); printf(双向循环链表中结点的个数为:%dn,L-Length);