数据结构实验报告.docx
- 文档编号:3924806
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:271.87KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
线性表的基本操作实现及其应用
一、实验目的
1、熟练掌握线性表的基本操作在两种存储结构上的实现。
2、会用线性链表解决简单的实际问题。
二、实验内容
题目一、该程序的功能是实现单链表的定义和操作。
该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。
其中,程序中的单链表(带头结点)结点为结构类型,结点值为整型。
单链表操作的选择以菜单形式出现,如下所示:
pleaseinputtheoperation:
1.初始化2.清空3.求链表长度4.检查链表是否为空
5.检查链表是否为满6.遍历链表(设为输出元素)7.从链表中查找元素
8.从链表中查找与给定元素值相同的元素在表中的位置
9.向链表中插入元素10.从链表中删除元素
其他键退出。
。
。
。
。
其中黑体部分必做
三、实验步骤
㈠、数据结构与核心算法的设计描述
1、单链表的结点类型定义
/*定义DataType为int类型*/
typedefintDataType;
/*单链表的结点类型*/
typedefstructLNode
{DataTypedata;
structLNode*next;
}LNode,*LinkedList;
2、初始化单链表
LinkedListLinkedListInit()
{}
3、遍历单链表
voidLinkedListTraverse(LinkedListL)
{}
4、求单链表的长度
intLinkedListLength(LinkedListL)
{}
5、从单链表表中查找元素
LinkedListLinkedListGet(LinkedListL,inti)
{//L是带头结点的链表的头指针,返回第i个元素}
6、从单链表表中查找与给定元素值相同的元素在链表中的位置
LinkedListLinkedListLocate(LinkedListL,DataTypex)
{}
7、向单链表中插入元素
voidLinkedListInsert(LinkedListL,inti,DataTypex)
{//L为带头结点的单链表的头指针,本算法
//在链表中第i个结点之前插入新的元素x
}
8、从单链表中删除元素
voidLinkedListDel(LinkedListL,DataTypex)
{删除以L为头指针的单链表中第i个结点}
9、用尾插法建立单链表
LinkedListLinkedListCreat()
㈡、函数调用及主函数设计
㈢程序调试及运行结果分析
实验数据
运行时出现:
然后选择下列操作:
选择8,用尾插法建立链表
选则操作2,求链表的长度
然后选择操作3,遍历链表
然后选择操作4,从链表中查找元素
然后选择操作5,从链表中查找与给定元素值相同的元素在表中的位置
然后选择个操作6,向链表中插入元素,之后再遍历链表
然后选择操作7从链表中删除元素之后再遍历链表
㈣实验总结
通过这次线性表的基本操作实现及其应用实验的学习,我学会了链表的许多基本操作,懂得如何用C语言去编程序,懂得了许多链表方面的知识,也认识到了自己的不足,需要在今后的学习中更加努力,学好接下来的课程。
四、主要算法流程图及程序清单
1、主要算法流程图:
2、程序清单
#include
#include
#include
#include
#defineMAX_SIZE100//链表的最大长度
typedefintDataType;
typedefstructLNode
{
DataTypedata;
structLNode*next;
}LNode,*LinkedList;
LinkedListLinkedListInit();//初始化单链表
intLinkedListLength(LinkedListL);//求单链表的长度
voidLinkedListTraverse(LinkedListL);//遍历单链表
LinkedListLinkedListGet(LinkedListL,inti);//从单链表表中查找元素
LinkedListLinkedListLocate(LinkedListL,DataTypex);
//从单链表表中查找与给定元素值相同的元素在链表中的位置
voidLinkedListInsert(LinkedListL,inti,DataTypex);//向单链表中插入元素
voidLinkedListDel(LinkedListL,DataTypex);//从单链表中删除元素
LinkedListLinkedListCreat(LinkedListL,intn);//尾插法建立单链表
voidmain()
{
inta;
LinkedListL;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
for(a=1;a<=10;a++){
cout<<"pleaseinputtheoperation"< cout<<"\n1.初始化"<<"\n2.求链表长度"<<"\n3.遍历链表(设为输出元素)"; cout<<"\n4.从链表中查找元素"<<"\n5.从链表中查找与给定元素值相同的元素在表中的位置"; cout<<"\n6.向链表中插入元素"<<"\n7.从链表中删除元素"<<"\n8.尾插法建立链表"<<"\n9.结束! "< cout<<"请输入你所需的操作: ! "< cin>>a; if(a==1) { LinkedListInit(); } elseif(a==2) { cout<<"链表长度: "< } elseif(a==3) { LinkedListTraverse(L); } elseif(a==4) { inti; cout<<"请输入要查找的位置: "< cin>>i; LinkedListGet(L,i); } elseif(a==5) { intx; cout<<"请输入要查找的数据: "< cin>>x; LinkedListLocate(L,x); } elseif(a==6) { inti,x; cout<<"请输入要插入的位置和数据: "< cin>>i>>x; LinkedListInsert(L,i,x); } elseif(a==7) { cout<<"请输入要删除的位置: "< cin>>a; LinkedListDel(L,a); } elseif(a==8) { intn; cout<<"请输入要创建的元素个数: "< cin>>n; L=LinkedListCreat(L,n); } elseif(a==9)exit(0); else { cout<<"输入错误,请重新选择"< }} } LinkedListLinkedListInit() //初始化单链表 { LinkedListL; L=(LinkedList)malloc(sizeof(LinkedList));//创建头节点 L->next=NULL; L->data=0; returnL; } intLinkedListLength(LinkedListL) //求单链表的长度 { LinkedListp; inti=0; p=L; while(p) { p=p->next; i++; } returni; } voidLinkedListTraverse(LinkedListL) //遍历单链表 { LinkedListm; m=L; while(m! =NULL) { cout< m=m->next; } } LinkedListLinkedListGet(LinkedListL,inti) //从单链表表中查找元素 { LinkedListp; p=L->next; intj=1; while(p&&j { p=p->next; j++; } if(! p||j>i) return0; else { cout< returnp; } } LinkedListLinkedListLocate(LinkedListL,DataTypex) //从单链表表中查找与给定元素值相同的元素在链表中的位置 { inti=1,m=0; if(L->next==NULL) return0; else { LinkedListp=L->next; while(p) { if(p->data==x) { m++; cout<<"位置为第"< } i++; p=p->next; } if(m>0) returnp; else return0; } } voidLinkedListInsert(LinkedListL,inti,DataTypex) //向单链表中插入元素 { LinkedListp,s; intj=0; p=L; while(p&&j { p=p->next; j++; } if(! p||j>=i-1) cout<<"插入失败! "< else { s=(LinkedList)malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; } L->data=LinkedListLength(L); } voidLinkedListDel(LinkedListL,DataTypex) //从单链表中删除元素 { LinkedListp,q;//p指针指向待删除结点;q为跟踪指针,指向其前驱。 q=p=L;//初始化指针 p=p->next;//q指向第一个结点 while((p! =NULL)&&(p->data! =x)) { q=p; p=p->next;//p! =NULL&&p->data! =x,指针后移,继续向后查找 }//q始终指向p的前驱 if(p==NULL) printf("Xnotfound"); else { q->next=p->next;//修改指针,删除结点X free(p); } L->data=LinkedListLength(L); } LinkedListLinkedListCreat(LinkedListL,intn) //尾插法建立单链表 { L=(LinkedList)malloc(sizeof(LNode)); L->next=NULL;//先建立一个带头结点的单链表 LinkedListq=L; for(inti=1;i<=n;i++) { LinkedListp=(LinkedList)malloc(sizeof(LNode)); cout<<"请输入数据: "< cin>>p->data;//输入元素值 p->next=NULL; q->next=p;//插入表尾q之后 q=p;//指针后移,使q始终指向表尾 } L->data=LinkedListLength(L); returnL; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告