1614010102曹妍数据结构实验报告1.docx
《1614010102曹妍数据结构实验报告1.docx》由会员分享,可在线阅读,更多相关《1614010102曹妍数据结构实验报告1.docx(11页珍藏版)》请在冰豆网上搜索。
1614010102曹妍数据结构实验报告1
哈尔滨理工大学
软件与微电子学院
实验报告
(2017-2018第一学期)
课程名称:
班级:
学号:
姓名:
实验名称
数据结构实验一
专业
软件工程
姓名
曹妍
学号
1614010102
班级
软件16-1班
一、实验目的:
1.熟悉链表结构;
2.掌握链表结构上的各种操作;
3.学会运用链表结构求解问题。
二、实验内容:
建立一个单链表,在此链表上实现以下几种操作:
1.求此单链表的长度;
2.在此单链表的第i个元素结点之前插入一个结点;
3.删除此单链表的第i个元素结点。
三、实验设备及软件环境:
软件需求:
CodeBlocks
硬件需求:
微型计算机
四、实验过程及结果:
#include
#include
/*定义ElemType为int类型*/
typedefintElemType;
#defineTRUE1
#defineFALSE0
#defineNULL0
#defineflag-1
/*单链表的结点类型*/
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}
LNode,*LinkedList;
/*初始化单链表*/
LinkedListLinkedListInit()
{
LinkedListL;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
returnL;
}
/*清空单链表*/
voidLinkedListClear(LinkedListL)
{
L->next=NULL;
printf("链表已经清空\n");
}
/*检查单链表是否为空*/
intLinkedListEmpty(LinkedListL)
{
if(L->next==NULL)returnTRUE;
elsereturnFALSE;
}
/*遍历单链表*/
voidLinkedListTraverse(LinkedListL)
{
LinkedListp;
p=L->next;
if(p==NULL)printf("单链表为空表\n");
else
{
printf("链表中的元素为:
\n");
while(p!
=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
printf("\n");
}
intLinkedListLength(LinkedListL)
{
LinkedListp;
intj;
p=L->next;
j=0;
while(p!
=NULL)
{
j++;
p=p->next;
}
returnj;
}
LinkedListLinkedListGet(LinkedListL,inti)
{
LinkedListp;
intj;
p=L->next;
j=1;
while(p!
=NULL&&j
{
p=p->next;
j++;
}
if(j==i)returnp;
elsereturnNULL;
}
intLinkedListLocate(LinkedListL,ElemTypex)
{
LinkedListp;
intj;
p=L->next;
j=1;
while(p!
=NULL&&p->data!
=x)
{
p=p->next;
j++;
}
if(p)returnj;
elsereturn0;
}
voidLinkedListInsert(LinkedListL,inti,ElemTypex)
{
LinkedListp,s;
intj;
j=1;
p=L;
while(p&&j
{
p=p->next;
j++;
}
if(p==NULL||j>i)
printf("插入位置不正确\n");
else
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("%d已插入到链表中\n",x);
}
}
voidLinkedListDel(LinkedListL,inti)
{
LinkedListp,q;
intj;
j=1;
p=L;
while(p->next&&j
{
p=p->next;
j++;
}
if(p->next==NULL)
printf("删除位置不正确\n");
else
{
q=p->next;
p->next=q->next;
free(q);
printf("第%d个元素已从链表中删除\n",i);
}
}
LinkedListLinkedListCreat()
{
LinkedListL=LinkedListInit(),p,r;
ElemTypex;
r=L;
printf("请依次输入链表中的元素,输入-1结束\n");
scanf("%d",&x);
while(x!
=flag)
{
p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf("%d",&x);
}
r->next=NULL;
returnL;
}
intscan()
{
intd;
printf("请选择要进行的操作\n");
printf("1.初始化2.清空3.求链表长度4.检查链表是否为空\n");
printf("5.遍历链表6.从链表中查找元素\n");
printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置\n");
printf("8.向链表中插入元素9.从链表中删除元素\n");
printf("其他键退出。
。
。
\n");
scanf("%d",&d);
return(d);
}
main()
{
intquit=0;
inti,locate;
ElemTypee;
LinkedListL,p;
while(!
quit)
switch(scan())
{
case1:
L=LinkedListInit();
printf("\n");
break;
case2:
LinkedListClear(L);
printf("\n");
break;
case3:
printf("链表的长度为%d\n",LinkedListLength(L));
break;
case4:
if(LinkedListEmpty(L))printf("链表为空\n");
elseprintf("链表非空\n");
break;
case5:
LinkedListTraverse(L);
break;
case6:
printf("请输入待查询元素在链表中的位置:
");
scanf("%d",&i);
p=LinkedListGet(L,i);
if(p)printf("链表中第%d个元素的值为:
%d\n",i,p->data);
elseprintf("查询位置不正确\n");
break;
case7:
printf("请输入待查询元素的值:
");
scanf("%d",&e);
locate=LinkedListLocate(L,e);
if(locate)
printf("%d在链表中的位置是:
%d\n",e,locate);
elseprintf("链表中没有值为%d的元素\n",e);
break;
case8:
printf("请输入插入元素的位置和值(中间以空格或回车分割):
\n");
scanf("%d%d",&i,&e);
LinkedListInsert(L,i,e);
break;
case9:
if(LinkedListLength(L)==0)
printf("链表已经为空,不能删除\n");
else
{
printf("请输入待删除元素的位置:
\n");
scanf("%d",&i);
LinkedListDel(L,i);
}
break;
case10:
L=LinkedListCreat();
printf("\n");
break;
default:
quit=1;
}
}
五、总结:
这是一门纯属于设计的科目,它需用把理论变为上机调试。
在学习科目的第一节课起,李老师就为我们阐述了它的重要性。
它对我们来说具有一定的难度。
它是其它编程语言的一门基本学科。
刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。
老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。
TC里检查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。
此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。
在这一段努力学习的过程中,我们的编程设计有了明显的提高。
其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。
现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。
只要努力去学习,就会灵活的去应用它。
实验成绩:
指导教师:
年月日