实验二线性表的顺序存储结构实现指导老师:朱芳学号:13011432班级:13083414姓名:张杭俊【实验目的】1.熟悉VisualC++工程项目的文件组织方式;2.线性表中数据元素间的关系及其顺序存储结构方式的表示方法;3.线性表的操作方法与接口函数的设计方法;【实验原理】顺序表程序实现方法:1)声明线性表的数据类型;2)一般在头文件中声明(该头文件中还应包括操作接口的声明);3)告诉编译器该数据类型占内存空间的大小;4)定义线性表类型的变量;5)在函数中或实现代码中的定义;6)告诉编译器为变量分配内存空间;7)操作线性表类型变量;8)操作变量中保存的数据;【实验要求】1.熟悉线性表的逻辑结构特点;2.熟悉线性表常用操作特点;3.理解以上给出的线性表顺序存储结构基本原理;4.项目组织及文件命名要规范;【实验内容】1.本次文件提供的代码ListInArray.h:#includeiostreamusingnamespacestd;#defineLISTSIZE100typedefintDataType;typedefstructSqList{DataTypeitems[LISTSIZE];intlength;}LIST;voidInitList(LIST&L);intListEmpty(LIST&L);intListLengtn(LIST&L);intListInsert(LIST&L,intpos,DataTypeitem);intListDelete(LIST&L,intpos,DataType*item);intGetelem(LIST&L,intpos,DataType*item);intFind(LIST&L,DataTypeitem);intTraverseList(LIST&L);listInArray.cpp:#includelistinarray.hvoidInitList(LIST&L){L.length=0;}intListEmpty(LIST&L){if(L.length=0)return1;elsereturn0;}intListLength(LIST&L){returnL.length;}intListInsert(LIST&L,intpos,DataTypeitem){inti;if(L.length=LISTSIZE){cout顺序表满,无法插入!endl;return0;}if(pos=0||posL.length+1){cout插入位置无效!endl;return0;}for(i=L.length-1;i=pos-1;i--){L.items[i+1]=L.items[i];}L.items[pos-1]=item;L.length++;return1;}intListDelete(LIST&L,intpos,DataType*item){inti;if(ListEmpty(L)){cout顺序表为空表,无法删除!endl;return0;}if(pos1||posL.length){cout删除位置无效!endl;return0;}*item=L.items[pos-1];for(i=pos;iL.length;i++)L.items[i-1]=L.items[i];L.length--;return1;}intGetElem(LIST&L,intpos,DataType*item){if(ListEmpty(L))return0;if(pos=0||posL.length){cout位置无效!endl;return0;}*item=L.items[pos-1];return1;}intFind(LIST&L,DataTypeitem){inti=0;if(ListEmpty(L)){cout顺序表为空表,无法查找!endl;return0;}while(iL.length&&L.items[i]!=item)i++;if(iL.length)returni+1;elsereturn0;}intTraverseList(LIST&L){inti;for(i=0;iL.length;i++)coutL.items[i];coutendl;return1;}Content.cpp:#includelistinarray.hintmain(void){LISTmy_List1,my_List2;DataTypeArray[]={27,39,2,77,89,66};InitList(my_List1);InitList(my_List2);ListInsert(my_List1,1,89);ListInsert(my_List1,1,77);ListInsert(my_List1,3,66);ListInsert(my_List1,1,2);ListInsert(my_List1,1,39);ListInsert(my_List1,1,27);for(inti=1;i=6;i++)ListInsert(my_List2,i,Array[i-1]);coutmy_List1:;TraverseList(my_List1);coutmy_List2:;TraverseList(my_List2);return0;}实验结果:(1)⑥修改代码:Main函数处修改:for(inti=1;i=10;i++)ListInsert(my_List2,i,i);for(i=1;i=10;i++)ListInsert(my_List2,11,i);实验结果:(1)⑦修改代码:ListinArray.h处修改:typedefcharDataType;Main函数处修改:DataTypeArray[]={'s','t','u','d','e','n','t'};for(inti=1;i=7;i++)ListInsert(my_List2,i,Array[i-1]);实验结果:2.重新设计主程序:#includelistinarray.hintmain(void){LISTmy_list;DataTypet;InitList(my_list);for(inti=0;i5;i++)ListInsert(my_list,1,'a'+i);cout顺序表长度=ListLength(my_list)endl;cout顺序表中元素:;TraverseList(my_list);if(ListEmpty(my_list)!=1)cout顺序表非空endl;elsecout顺序表空endl;ListInsert(my_list,4,'f');cout在第四个位置插入f后:endl;TraverseList(my_list);ListDelete(my_list,3,&t);cout删除第三个元素后;TraverseList(my_list);GetElem(my_list,2,&t);cout顺序表的第二个元素是tendl;intpos;pos=Find(my_list,'b');cout元素b的位置是:posendl;return1;}3.设计线性接口函数intMergList(LIST&L1,LISTL2);intMergList(LIST&L1,LISTL2){DataTypet;for(inti=1;i=L2.length;i++){GetElem(L2,i,&t);ListInsert(L1,L1.length+1,t);}return1;}实验总结:通过本次实验,对于线性表的顺序存储结构实现的表示方法有了更深的理解;熟悉了工程项目文件的组织方式;将课本上所学到的算法用C++实现,从中看到了顺序存储结构的优缺点;对于学习链式存储结构很有帮助。