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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一

要求:①建立双向循环链表

②实现链表的插入、删除

运行程序点此处

实验程序源代码:

#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(i<1||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(i<1) /* 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);

}

相关文档
最新文档