资源描述:
《数据结构实验一实验报告——线性表》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、西安郵電學院数据结构实验报告题目:线性表系列操作系部名称:职业技术学院专业名称:计算机网络技术学生姓名:邓万宇指导教师:2010年9月21日至2010年10月12日题目:有两张非递增有序的线性学生表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。一、需求分析1.本演示程序根据已有的两张表的信息,实现两张表的合并及删除值相同元素的操作,需要用户输入学生的信息。2.在演示过程序中,用户输入需要合并的顺序表,即可观看合并结果。3.程序执行的命令包括:(1)构造线性表A(2)构造线性表B(3)求两张表的并(4)删除C中值相同的元
2、素二、概要设计1.为实现上述算法,需要线性表的抽象数据类型:ADTStack{数据对象:D={aj:
3、aiEElemSet,i=l…n,nMO}数据关系:Rl={>
4、ai-i,asED,i=2,・・・r)20}基本操作:init(list*L)操作结果:构造一个空的线性表L。ListLength(List*L)初始条件:线性表L已经存在操作结果:返回L中数据元素的个数。GetElem(ListL,inti,ElemType*e)初始条件:线性表L已经存在,1WiWListLength(&L)操作结果:用e返回L中第i个数据元素的值。EqualUst(Ele
5、mType*el,ElemType*e2)初始条件:数据元素el,e2存在操作结果:以el,e2中的姓名项作为判定el,e2是否相等的依据。LessEquaList(ElemType*el,ElemType*e2)初始条件:数据元素el,e2存在操作结果:以el,e2中的姓名项(为字符串)的W来判定el,e2是否有W的关系。LocateElem(List*I.a,ElemTypee,inttype)初始条件:线性表S已经存在操作结果:判断X中是否有与e相同的元素。MergeList(List*La,List*Lb,List*Lc)初始条件:非递减线性表La,Lb已经存在操
6、作结果:合并La,Lb得到Lc,Lc仍按非递减有序排列。UnionList(List*La,List*Lb)初始条件:线性表La,Lb已经存在操作结果:将所有在Lb而不在S中的元素插入到La中表尾的位置。PrintList(ListL)初始条件:线性表L己经存在操作结果:打印出表L。Listinsert(List*L,inti,structSTUe)初始条件:线性表L已经存在,lWiWListLength(&L)+l操作结果:在表L屮第i个位置前插入元素e,L的长度加1。}ADTList1.本程序有三个模块:(1)主程序模块voidmain(){初始化;{接受命令;显示结
7、果;}}(2)线性表单元模块:实现线性表抽象数据类型;(3)结点结构单元模块:定义线性表屮的结点结构。三、详细设计1•线性表的存储结构typedefstruct{int*e1cm;intlength;intlistsizejsqlist;2.对抽彖数据类型中的部分基本操作的伪码算法如下:voidinitlist(sqlist*L){inti;L->length=len;L->elem=(int*)malloc(40);for(i=0;ielem[i]);L->listsize=LISTINITSIZE;}//新建一表void
8、init(sqlist*L){L->elem=(int*)malloc(40);L->length=0;L->listsize=LIST_INIT_SIZE;}//给链表分配空间voidoutput(sqlist*L){inti;for(i=0;ilength;i++)printf(z/%3dzz,L->elem[i]);printf("");}//输出链表voidmerry(sqlist*A,sqlist*B,sqlist*C){inti,j,k;k=0;i=A->length~l;j=B->length-l;while(i>=0&&j>=0){if(A->
9、elem[i]elem[jJ){C->elem[k]=A->elem[i];i—;k++;}elseif(A->elcm[i]==B->elem[j]){C->elem[k]=B->elem[j];else{C->elem[k]=B->elem[j];j—;k++;}}while(i>=0){C->e1em[k]=A->elem[i];k++;i—;Iwhile(j>=0){C->elem[k]=B->elem[j];k++;j__;}C~>length=k;}//将链表A,B按要求放入C中2.主函数和其他函数的伪码算