线性表的基本操作 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 线性表的基本操作
姓名小明
一、需求分析
1.程序的功能:实现基本线性表的运算:插入数据,删除数据,查找数据,求顺序表长度,遍历链表。
2.输入输出的要求:数据必须为整数并大于0,插入数据必须为一位整数;
3.测试数据
测试数据可由使用者自己输入。
二、概要设计
1.本程序所用的抽象数据类型的定义:由顺序表,结构体通过指针连接组成;
然后根据各个选项调用所需函数
三、详细设计
1.定义相关的数据类型:
结构体链表SqList,其中包含
ElemType *elem; int length;int listsize;
2.写出各模块的伪码算法;
插入数据:
Status ListInsert(Sqlist &L,int i,ElemType e)
{
int *q=&(L.elem[i-1]);
ElemType *newbase,*p;
if(i<1||i>(L.length+1))
return ERROR;
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;
return OK;
}
删除数据:
Status ListDelete(Sqlist &L,int i,ElemType e)
{
if(i<1||(i>L.length))
return ERROR;
ElemType *p,*q;
p=&(L.elem[i-1]);
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return OK;
}
求表长:
int ListLength(Sqlist L)
{
return L.length;
}
Status GetElem(Sqlist &L,int i)
{
if(i<0||i>L.length)
exit(OVERFLOW);
return L.elem[i-1];
}
查找数据:
Status GetElem(Sqlist &L,int i)
{
if(i<0||i>L.length)
exit(OVERFLOW);
return L.elem[i-1];
}
int LocationElem(Sqlist L,ElemType element) {
for(i=0;i if(L.elem[i]==element) printf("第%d个元素为%d.\n",i+1,element); return i; } 3.画出函数的调用关系图。 四、使用说明及测试结果1输入初始元素值: 2删除数据 删除数据1 菜单 1 调用PrintLis 2 调用 ListDelete 3 调用 ListInser 4 调用 GetElem 5 调用 LocationEl em 6 调用 ListLeng th 谢谢使用 3、插入数据插入数据1 4、查找数据查找数据3 5、求长度 0退出 六、源程序 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 5 #define LISTINCREMENT 1 typedef int Status; typedef int ElemType; typedef struct { ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量 }Sqlist; static Sqlist L; static ElemType element; Status InitList(Sqlist &L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE ; return OK; } Status DestroyList(Sqlist &L) { if(L.elem==NULL) return ERROR; else free(L.elem); return OK; } Status ClearList(Sqlist &L) { if(L.elem==NULL) exit(ERROR);