数据结构实验一.docx
- 文档编号:8505370
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:11
- 大小:39.64KB
数据结构实验一.docx
《数据结构实验一.docx》由会员分享,可在线阅读,更多相关《数据结构实验一.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构实验一
《数据结构》实验报告一
学校:
班级:
学号:
姓名:
日期:
程序名:
一、上机实验的问题和要求:
顺序表的查找、插入与删除。
设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。
具体实现要求:
1.从键盘输入10个整数,产生顺序表,并输入结点值。
2.从键盘输入1个整数,在顺序表中查找该结点的位置。
若找到,输出结点的位置;若找不到,则显示“找不到”。
3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。
4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
三、源程序及注释:
#include
/*顺序表的定义:
*/
#defineListSize100/*表空间大小可根据实际需要而定,这里假设为100*/
typedefintDataType;/*DataType可以是任何相应的数据类型如int,float或char*/
typedefstruct
{DataTypedata[ListSize];/*向量data用于存放表结点*/
intlength;/*当前的表长度*/
}SeqList;
/*子函数的声明*/
voidCreateList(SeqList*L,intn);/*创建顺序表函数*/
intLocateList(SeqListL,DataTypex);/*查找顺序表*/
voidInsertList(SeqList*L,DataTypex,inti);/*在顺序表中插入结点x*/
voidDeleteList(SeqList*L,inti);/*在顺序表中删除第i个结点*/
voidPrintList(SeqListL,intn);/*打印顺序表中前n个结点*/
voidmain()
{
SeqListL;
intn=10,x,i;/*欲建立的顺序表长度*/
L.length=0;
/*调用创建线性表函数*/
printf(“createfunction:
\n”);
CreateList(&L,n);/*建立顺序表*/
PrintList(L,n);/*打印顺序表*/
/*调用查找函数*/
printf(“searchfunction:
\n”);
printf("inputthedatayouwanttosearch:
");
scanf("%d",&x);
i=LocateList(L,x);/*顺序表查找*/
if(i==0)
printf("sorry,don'tfind%d!
\n\n",x);
else
printf("ihavefindthe%d,itlocatein%d!
\n\n",x,i);
/*调用插入函数*/
printf(“Insertfunction:
\n”);
printf("输入要插入的位置:
(inputtheposition:
)");
scanf("%d",&i);
printf("输入要插入的元素:
(inputthedata:
)");
scanf("%d",&x);
InsertList(&L,x,i);/*顺序表插入*/
PrintList(L,n);/*打印顺序表*/
/*调用删除函数*/
printf(“deletefunction:
\n”);
printf("输入要删除的位置:
(inputtheposition:
)");
scanf("%d",&i);
DeleteList(&L,i);/*顺序表删除*/
PrintList(L,n);/*打印顺序表*/
}
/*顺序表的建立:
*/
voidCreateList(SeqList*L,intn)
{inti;
for(i=0;i {printf("\ninputthe%ddata: ",i+1); scanf("%d",&(*L).data[i]); } (*L).length=n; } /*顺序表的查找: */ intLocateList(SeqListL,DataTypex) {inti=0; while(i<___=L.length-1______________&&____L.data[i]_=! e______________) ++i; if(i elsereturn0; } /*顺序表的插入: */ voidInsertList(SeqList*L,DataTypex,inti) {/*将新结点x插入L所指的顺序表的第i个结点的位置上*/ intj; if(i<1||i>__L.length____________________) { printf("插入位置非法"); exit(0); } if((*L).length>=___MaxSize_______________) { printf("表空间溢出,退出运行"); exit(0); } for(j=(*L).length-1;j>=i-1;j--) ____L.data[k+1]=L.data[k]_______________________________;/*顺序表元素从后向前依次后移*/ ____L.data[i-1]=e_______________________________;/*将x插入第i个结点位置*/ _____L.length++___________________________;/*表长自增1*/ } /*顺序表的删除: */ voidDeleteList(SeqList*L,inti) {/*从L所指的顺序表中删除第i个结点*/ intj; if(i<1||i>___L.length____________________________) { printf("删除位置非法"); exit(0); } for(j=i;j<=(*L).length-1;j++) ____L.data[k-1]=L.data[k]________________________________;/*顺序表自第i个结点开始,依次前移*/ ______L.length--__________________________;/*表长自减1*/ } /*顺序表的打印: */ voidPrintList(SeqListL,intn) {inti; printf(“thesequallistdatais: ”); for(i=0;i printf("%d",L.data[i]); printf("\n\n"); } 调试后的代码: #include #defineMaxSize100 typedefintDatatype; typedefstruct { Datatypedata[MaxSize]; intlength; }seqlist; voidGreatList(seqlist*L,intn); intGetList(seqlistL,Datatypex); intIntList(seqlist*L,Datatypex,inti); intDelList(seqlistL,inti,Datatype*x); voidPrintList(seqlistL,intn); voidmain() { seqlistL; intn=10,x,i; L.length=0; printf("greatfunction: \n"); GreatList(&L,n); PrintList(L,n); printf("getfunction: \n"); printf("pleaseinputyourwanttosearch\n"); scanf("%d",&x); i=GetList(L,x); if(i==0) { printf("\nsorry,don'tfind%d\n",x); } else { printf("\nhavefindthe%d,itlocatedin%d\n",x,i); } printf("\nInsfunction: \n"); printf("\npleaseinputtheposition: \n"); scanf("%d",&i); printf("\npleaseinputthedata: \n"); scanf("%d",&x); IntList(&L,i,x); PrintList(L,n); printf("\ndelfunction: \n"); printf("\npleaseinputyouwanttodeleteposition: \n"); scanf("%d",&i); printf("\npleaseinputyouwantdeletenumber: "); scanf("%d",&x); DelList(L,i,&x); PrintList(L,n); //getch(); } voidGreatList(seqlist*L,intn) { inti; for(i=0;i { printf("\npleaseinputthe%ddata\n",i+1); scanf("%d",&(*L).data[i]); } (*L).length=n; } intGetList(seqlistL,Datatypex) { inti; i=0; while((i<=L.length-1)&&(L.data[i]! =x)) i++; if(i return(i+1); else return(-1); } intIntList(seqlist*L,Datatypex,inti) { intk; if((i<1)||(i>L->length)) { printf("\nThepositioniswrong\n"); return(0); } if(L->length>=MaxSize) { printf("\nempty\n"); return(0); } for(k=L->length-1;k>=i-1;i++) { L->data[k+1]=L->data[k]; L->data[i-1]=x; L->length++; } return (1); } intDelList(seqlistL,inti,Datatype*x) { intk; if((i<1)||(i>L.length)) { printf("\nThepositioniswrong\n"); return(0); } *x=L.data[i-1]; for(k=i;i<=L.length;k++) { L.data[k-1]=L.data[k]; L.length--; } return (1); } voidPrintList(seqlistL,intn) { inti; printf("\nThesequalListDatais: \n"); for(i=0;i printf("%d",L.data[i]); printf("\n"); } 四、运行输出结果: 五、调试和运行程序过程中产生的问题及采取的措施: 开始只是一些小的问题,如丢了分号、括号,单词写错了,前后不一致等等。 最主要的问题就是函数检查没错误,但是运行中出现错误。 第一个就是插入的函数能打印出来,但是出入不进去数;第二就是删除不了数。 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 本次实验主要考查的的是顺序表的应用及编写,而其他的很多功能都是原来练习过的,相对来说比较容易。 但是完成本次实验收获还是很多的,不仅仅实在新知识上的加深,进一步了解顺序表。 从这次的试验中认识到了自己还有没有学习到的地方,今后还要认真吸取验教训。 七、对实验方式、组织、设备、题目的意见和建议: 希望老师以后可以给我们多些自己动手实践的机会,可以在课堂上多让我们动手去上机操作,老师带领我们完成主要部分,或给一些提示指导。 以后课下及时复习,认真看好课本,希望老师课下及时给予指导帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验