线性表的基本操作实验报告.docx

上传人:b****6 文档编号:6990306 上传时间:2023-01-15 格式:DOCX 页数:12 大小:154.40KB
下载 相关 举报
线性表的基本操作实验报告.docx_第1页
第1页 / 共12页
线性表的基本操作实验报告.docx_第2页
第2页 / 共12页
线性表的基本操作实验报告.docx_第3页
第3页 / 共12页
线性表的基本操作实验报告.docx_第4页
第4页 / 共12页
线性表的基本操作实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

线性表的基本操作实验报告.docx

《线性表的基本操作实验报告.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

线性表的基本操作实验报告.docx

线性表的基本操作实验报告

实验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;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1