线性表的顺序存储结构_实验报告样例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
年南昌航空大学实验报告(用实验报告纸,手写)
课程名称:数据结构实验名称:实验一线性表的顺序存储结构
班级: 080611 学生姓名:赖凌学号: 08061101 指导教师评定:签名:
题目:有两张非递减有序的线性学生表A,B,采用顺序存储结构,两张表合并用c表存,要求C仍为非递减有序的,并删除C中值相同的表。
一、需求分析
⒈本演示程序根据已有的6位学生的信息,实现两张表的合并及删除值相同元素的操作,不需要用户
重新输入学生的信息。
⒉在演示过程序中,用户敲击键盘,即可观看演示结果。
⒊程序执行的命令包括:
(1)构造线性表A (2)构造线性表B (3)求两张表的并(4)删除C中值相同的元素
二、概要设计
⒈为实现上述算法,需要线性表的抽象数据类型:
ADT Stack {
数据对象:D={a i:|a i∈ElemSet,i=1…n,n≥0}
数据关系:R1={|a i-1,a i∈D,i=2,…n≥0}
基本操作:
init(list *L)
操作结果:构造一个空的线性表L。
ListLength(List *L)
初始条件:线性表L已经存在
操作结果:返回L中数据元素的个数。
GetElem(List L, int i, ElemType *e)
初始条件:线性表L已经存在,1≤i≤ListLength(&L)
操作结果:用e返回L中第i个数据元素的值。
EqualList(ElemType *e1,ElemType *e2)
初始条件:数据元素e1,e2存在
操作结果:以e1,e2中的姓名项作为判定e1,e2是否相等的依据。
Less_EquaList(ElemType *e1,ElemType *e2)
初始条件:数据元素e1,e2存在
操作结果:以e1,e2中的姓名项(为字符串)的≤来判定e1,e2是否有≤的关系。
LocateElem(List *La,ElemType e,int type)
初始条件:线性表La已经存在
操作结果:判断La中是否有与e相同的元素。
MergeList(List *La,List *Lb,List *Lc)
初始条件:非递减线性表La,Lb已经存在
操作结果:合并La,Lb得到Lc,Lc仍按非递减有序排列。
UnionList(List *La ,List *Lb)
初始条件:线性表La,Lb已经存在
操作结果:将所有在Lb而不在La中的元素插入到La中表尾的位置。
PrintList(List L)
初始条件:线性表L已经存在
操作结果:打印出表L。
ListInsert(List *L, int i, struct STU e)
初始条件:线性表L已经存在,1≤i≤ListLength(&L)+1
操作结果:在表L中第i个位置前插入元素e,L的长度加1。
}ADT List
2. 本程序有三个模块:
⑴主程序模块
void main(){
初始化;
{
接受命令;
显示结果;
}
}
⑵线性表单元模块:实现线性表抽象数据类型;
⑶结点结构单元模块:定义线性表中的结点结构。
三、详细设计
⒈元素类型,结点类型
struct STU{
char name[20]; //学生名字、学号、年龄、分数
char stuno[10];
int age;
int score;
};
typedef struct STU ElemType; //元素类型
struct LIST{
ElemType *elem;
int length; //表的长度、大小
int listsize;
};
typedef struct LIST list; //结点类型
2.对抽象数据类型中的部分基本操作的伪码算法如下:
int init(List *L)
{
L→elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
If(!L→elem) exit (OVERFLOW);
L→length=0;
L→listsize= LIST_INIT_SIZE;
Return OK;
}//初始化表
int ListLength(List *L)
{
return L→length;
}//返回表长
void GetElem(List L, int i, ElemType *e)
{
*e=L.elem[i];
} //返回元素
int locateElem(List *La, ElemType e, int type)
{
int I;
switch(type) //确定元素在表中的位置
{
case EQVAL;
for(i=0;i if(EqualList(&La→elem[i],&e)) return 1;break; default; break; } return 0; } void MergeList(List *La, List *Lb, List *Lc) { //将两个表合并成Lc ElemType *pa,*pb,*pc,*pa_last,*pb_last; Pa=La→elem;pb=Lb→elem; Lc→Listsize=Lc→length=La→length+Lb→length; Pc=Lc→elem==(ElemType *)malloc(Lc→listsize*sizeof(ElemType)); if (!Lc→elem) exit(OVERFLOW); pa_last=La→elem+La→length-1; pb_last=Lb→elem+Lb→length-1;