1 / 22
文档名称:

东北大学数据结构实验报告.doc

格式:doc   大小:110KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

东北大学数据结构实验报告.doc

上传人:2786321826 2022/1/29 文件大小:110 KB

下载得到文件列表

东北大学数据结构实验报告.doc

相关文档

文档介绍

文档介绍:-
. z.
. printf("error\n");
printf("请输入第%d个人的密码:",i+1);
scanf("%d",&pin);
p->data=i+1;
p->password=pin;
q->ne*t=NULL;
q->ne*t=p;
q=p;
}
q->ne*t=(*L)->ne*t;//指向L结点,形成
}
创立这个链表的时间复杂度为O(n),空间复杂度为O〔n2〕。
显示链表中的信息内容:
void Display(CLinkList *L,int n)
{
int i;
CLinkList p;
p=(*L)->ne*t;
printf("\n显示链表内容\n");
for(i=0;i<n;i++)
{
printf("编号:%2d 密码:%d\n",p->data,p->password);
p=p->ne*t;
-
. z.
. /
/ v .
}
}
该算法的时间复杂度为O〔n〕,空间复杂度为O(n2)。
删除结点,完成出列功能:
void Delete_L(CLinkList *L,int n,int m)
{
int i=0,j;
CLinkList p,q;
q=(*L);
p=(*L)->ne*t;
printf("\n删除的顺序:\n");
while(i<n)
{
for(j=0;j<m-1;j++)
{
q=p;
p=p->ne*t;
}
printf("编号:%d 密码:%d\n",p->data,p->password);
m=p->password;
q->ne*t=p->ne*t;
free(p);
p=q->ne*t;
n--;
}
}
该算法的时间复杂度为O(n2),空间复杂度为O(n2)。
该设计的巧妙之处在于并不需要额外的空间来存储数据,因而空间复杂度较低,而且线性表的链式存储构造可以用物理位置上的邻接关系来表示结点间的逻辑关系,这样使读者在阅读代码的过程中可以更加方便和便于理解。它可以随机存取表中的任一结点,还可以免插入和删除操作带来的大量的结点的移动,能给结点动态分配内存,这样就不存在存储空间缺乏的情况,而且循环链表还可以方便的从链表的最后一个结点遍历到链表的第一个结点。使操作更加方便。
你在调试过程中发现了怎样的问题?又做了怎样的改良
1〕在最开场的调试阶段,我发现链表插入完毕之后,不能按照正常情况下输出链表的内容,只能正常显示第一个人的数据,在显示第二个人的信息是数据为乱码。之后我发现,在插入链表的过程中,我是在执行循环插入数据的循环中将结点的指针指向了第一个结点,因而,在进展链表显示的过程中,第二个结点的内容不是正常的数据。之后我将q->ne*t=(*L)->ne*t;这条指令放到了整个插入循环的外部,这样表示在插入所有数据之后,最后一个结点的指针指向了第一个结点,形成了一个循环队列,此时链表的数据显示正确。
再次调试时,我发现人员出列时,只有第一个人出列正常,在第二个人出列时程序自动终止,不能正常显示之后出列的人的信息,并且程序自动终止运行,经过检查我发现在经过一次删除后,没有将指针指向下一个结点,因而出现问题。经过更改,程序运行正常。
在实验的开场阶段,数据遍历总是出现问题,经过查找资料我发现了约瑟夫环头结点的特殊性,因此我不再使用头结点,程序便恢复正常了。
-
.