数据结构实验建立双向循环链表以及插入删除操作.docxVIP

  • 20
  • 0
  • 约2.16千字
  • 约 4页
  • 2020-11-30 发布于山东
  • 举报

数据结构实验建立双向循环链表以及插入删除操作.docx

实验一 要求:①建立双向循环链表 ②实现链表的插入、删除 运行程序点此处 实验程序源代码: #include #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,*DuLinkList; 构建一个空的双向循环链表 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;i=n;i++) { q=(DuLinkList)malloc(sizeof(DuLNode)); printf( 您该输入第 %d个元素的值了 :,i); scanf(%d,q-data); p-next =q; q-prior=p; q-next=L; L-prior =q; p=q; L-Length ++; } } 查找元素的位置 DuLinkList GetElemP(DuLinkList h,int i) { int j; DuLinkList p=h; for(j=1;j=i;j++) p=p-next ; return p; } 结点的插入 status Listinsert(DuLNode *m,int i,int e) { // 在带头结点的双链循环线性表 L 中第 i 个位置之前插入元素 e,i 的合法值为 1≤i ≤ 表长 DuLinkList p,q; if(i1||i(m-Length)) // i 值不合法 return ERROR; p=GetElemP(m,i); if(!p) return ERROR; 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个位置之前插入了一结点元素 :%d\n,i,e); return OK; } 结点的删除 status ListDelete(DuLinkList L,int i) { // 删除带头结点的双链循环线性表 L 的第 i 个元素, i 的合法值为 1≤ i ≤表长 DuLinkList p; if(i1) /* i 值不合法 */ return ERROR; p=GetElemP(L,i); if(!p) return ERROR; p-prior-next=p-next; p-next-prior=p-prior; L-Length --; printf( 删除了双线循环链表中第 %d个结点 , 元素值为 :%d\n,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(%d\n,p-data ); } 主函数实现链表的创建,插入,删除等操作 void main() { 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 {ListDe

文档评论(0)

1亿VIP精品文档

相关文档