线性表的基本操作实验报告.docx
- 文档编号:1764141
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:12
- 大小:154.18KB
线性表的基本操作实验报告.docx
《线性表的基本操作实验报告.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
线性表的基本操作实验报告
实验1线性表的基本操作
姓名小明
一、需求分析
1.程序的功能:
实现基本线性表的运算:
插入数据,删除数据,查找数据,求顺序表长度,遍历链表。
2.输入输出的要求:
数据必须为整数并大于0,插入数据必须为一位整数;
3.测试数据
测试数据可由使用者自己输入。
二、概要设计
1.本程序所用的抽象数据类型的定义:
由顺序表,结构体通过指针连接组成;
2.主程序的流程及各程序模块之间的层次关系。
然后根据各个选项调用所需函数
三、详细设计
1.定义相关的数据类型:
结构体链表SqList,其中包含
ElemType*elem;intlength;intlistsize;
2.写出各模块的伪码算法;
插入数据:
StatusListInsert(Sqlist&L,inti,ElemTypee)
{
int*q=&(L.elem[i-1]);
ElemType*newbase,*p;
if(i<1||i>(L.length+1))
returnERROR;
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
returnOK;
}
删除数据:
StatusListDelete(Sqlist&L,inti,ElemTypee)
{
if(i<1||(i>L.length))
returnERROR;
ElemType*p,*q;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
returnOK;
}
求表长:
intListLength(SqlistL)
{
returnL.length;
}
StatusGetElem(Sqlist&L,inti)
{
if(i<0||i>L.length)
exit(OVERFLOW);
returnL.elem[i-1];
}
查找数据:
StatusGetElem(Sqlist&L,inti)
{
if(i<0||i>L.length)
exit(OVERFLOW);
returnL.elem[i-1];
}
intLocationElem(SqlistL,ElemTypeelement)
{
inti=0;
for(i=0;i if(L.elem[i]==element) printf("第%d个元素为%d.\n",i+1,element); returni; } 3.画出函数的调用关系图。 四、使用说明及测试结果 1输入初始元素值: 2删除数据 删除数据1 3、插入数据 插入数据1 4、查找数据 查找数据3 5、求长度 0退出 六、源程序 #include #include #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineINFEASIBLE-1 #defineOVERFLOW-2 #defineLIST_INIT_SIZE5 #defineLISTINCREMENT1 typedefintStatus; typedefintElemType; typedefstruct { ElemType*elem;//存储空间基址 intlength;//当前长度 intlistsize;//当前分配的存储容量 }Sqlist; staticSqlistL; staticElemTypeelement; StatusInitList(Sqlist&L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(! L.elem)exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; returnOK; } StatusDestroyList(Sqlist&L) { if(L.elem==NULL) returnERROR; else free(L.elem); returnOK; } StatusClearList(Sqlist&L) { if(L.elem==NULL) exit(ERROR); inti; ElemType*p_elem=L.elem; for(i=0;i { *L.elem=NULL; L.elem++; } L.elem=p_elem; returnOK; } StatusListEmpty(SqlistL) { inti; ElemType*p_elem=L.elem; for(i=0;i { if(*L.elem! =0) { L.elem=p_elem; returnFALSE; } L.elem++; } returnTRUE; } intListLength(SqlistL) { returnL.length; } StatusGetElem(Sqlist&L,inti) { if(i<0||i>L.length) exit(OVERFLOW); returnL.elem[i-1]; } intLocationElem(SqlistL,ElemTypeelement) { inti=0; for(i=0;i if(L.elem[i]==element) printf("第%d个元素为%d.\n",i+1,element); returni; } StatusListInsert(Sqlist&L,inti,ElemTypee) { int*q=&(L.elem[i-1]); ElemType*newbase,*p; if(i<1||i>(L.length+1)) returnERROR; if(L.length>=L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(! newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L.length; returnOK; } StatusListDelete(Sqlist&L,inti,ElemTypee) { if(i<1||(i>L.length)) returnERROR; ElemType*p,*q; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; returnOK; } voidPrintList(SqlistL) { for(inti=0;i printf("%d",L.elem[i]); } //***********************主函数******************************// voidmain() { inti; SqlistLa; InitList(La); printf("请输入%d个初始元素值: ",LIST_INIT_SIZE); for(i=0;i<=4;i++) {scanf("%d",&La.elem[i]); La.length++;} printf("存入的结果为: "); PrintList(La); menu: printf("\n\n*************请选择要对线性表进行的操作: *************\n1显示,2删除,3插入,4查找,5比较,6长度,0退出\n请选择操作序号: "); intflag; scanf("%d",&flag); switch(flag) { case1: printf("\n"); PrintList(La); break; case2: printf("\n请输入要删除元素的位置: "); scanf("%d",&i); ElemTypee; ListDelete(La,i,e); printf("改变后的线性表: "); PrintList(La); break; case3: {printf("\n请输入要插入的元素: "); ElemTypee; scanf("%d",&e); printf("请输入要插入的位置: "); scanf("%d",&i); ListInsert(La,i,e); printf("改变后的线性表: "); PrintList(La);} break; case4: printf("\n请输入要查找元素的位置: "); inti; scanf("%d",&i); e=GetElem(La,i); printf("第%d个元素的值是: %d\n",i,e); break; case5: intm; printf("\n请输入比较的元素: "); scanf("%d",&m); LocationElem(La,m); break; case6: printf("\n线性表元素个数为: %d\n",ListLength(La)); break; default: printf("\n输入的选择不存在! \n"); break; case0: printf("\n谢谢使用! \n");return; } gotomenu; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 基本 操作 实验 报告