攀 枝 花 学 院 实 验 报 告
实验课程 数据结构 实验项目:线性表的顺序存储 实验日期: 系: 班级: 姓名: 学号: 同组人:
指导老师: 成绩: [ 实验目的:]
1、掌握线性表的顺序存储结构。
2、能熟练地利用顺序存储结构实现线性表的基本操作。 3、能熟练地掌握顺序存储结构中算法的实现。
[ 实验仪器设备、药品、器材 ]
1、硬件环境 微型计算机一台 2、软件环境
Windows98/2000/XP/win7操作系统、调试程序VC 6.0.
[ 实验原理(装置)]
无
[ 实验步骤(内容)]
一、建立含有若干个元素的顺序表,并将结果在屏幕上输出。 1、顺序表源代码如下
创建了顺序表的头文件SeqList.h
主要代码如下:
void initList(SeqList& L) { L.data=new DataType[initSize]; if (! L.data) { cerr<<\存储错误分配!\\n\ exit(1); } L.maxSize=initSize; L.n=0; };
void Creat(SeqList& L)//获取线性表的值
{ int i,n; initList(L); printf(\请输入线性表的元素个数:\ scanf(\ printf(\请输入%d个顺序表元素:\\n\ for(i=0;i void clearList(SeqList& L)//清空顺序表 { 1 实 验 报 告 附 页 { L.n=0; L1.data=new DataType[L1.maxSize]; } if(! L1.data) { int Length(SeqList& L)//计算顺序表的长度 { cout<<\存储分配错误!\\n\ return L.n; exit(1); } } } int isEmpty(SeqList& L)//判断空否 { for(int i=1;i<=L2.n;i++) return (L.n==0)?1:0; L1.data[i-1]=L2.data[i-1]; } }; int isFull(SeqList& L)//判断满否 int Insert(SeqList& L,int i,DataType& x)//顺序表插入 { { return (L.n==L.maxSize)?1:0; if(L.n==L.maxSize) return 0; } if(i<0 || i>L.n+1) return 0; for(int j=L.n;j>=i;j--) int Search(SeqList& L,DataType x)//顺序查找算法 { L.data[j]=L.data[j-1]; for(int i=1;i<=L.n;i++) L.data[i-1]=x; if(L.data[i-1]==x)return i; L.n++; return 0; return 1; }; }; int Locate(SeqList& L,int i)//顺序定位算法 int Remove(SeqList& L,int i,DataType& x)//顺序表删{ 除 if(i>=1 && i<=L.n) return i; { else if(!L.n)return 0; return 0; if(i<1 || i>L.n)return 0; }; x=L.data[i-1]; for(int j=i;j { L.n--; L1.maxSize=L2.maxSize; return 1; L1.n=L2.n; }; if(!L1.data) 主函数代码如下: void main() { int ch; int i; DataType x; SeqList L; L.n=0; initList(L); printf(\ **************\\n\ printf(\欢迎进入CHEN CHENG 顺序表结构******************\\n\ Creat(L); menu();/*显示菜单*/ scanf(\输入一个数符*/ while(1) { switch(ch) { case 0: printf(\ 2 实 验 报 告 附 页 Print(L); Copy(La,L); break; printf(\输出顺序表L的值: case 1: printf(\\\n\Length(L)); Print(L); break; printf(\ case 2: i=isEmpty(L); printf(\输出顺序表La的值: if(i==0) \\n\ Print(La); printf(\顺序表非 break; 空!\\n\ if(i==1) case 7:printf(\ scanf(\ printf(\顺序表为 printf(\空!\\n\ break; printf(\ case 3: i=isFull(L); scanf(\ if(i==1) printf(\ if(Insert(L,i,x)==1) printf(\顺序表已 { 满!\\n\ if(i==0) printf(\ printf(\顺序表未 printf(\输出插入元素后的顺满!\\n\序 表L!\\n\ break; Print(L); case 4:printf(\ } scanf(\ else i=Search(L,x); printf(\ !\\n\ if(i==0) break; printf(\查找失败!\ case 8:printf(\ else scanf(\ if(Remove(L,i,x)) printf(\查找成功:\\n%d { 为查找数!\\n\ break; printf(\ case 5:printf(\ deleted data is %d!\\n\ scanf(\ printf(\输出删除后元素后的 i=Locate(L,i); 顺序表L!\\n\ if(i==0) printf(\ Print(L); find %d\\n\ } else else printf(\ printf(\of %d is %d\\n\ break; break; case 9:printf(\创建一个新的顺序表!\\n\ SeqList Lc; case 6: printf(\创建一个新的顺序 La.n=0; 表!\\n\ SeqList La; initList(Lc); La.n=0; Creat(Lc); initList(La); Merge(Lc,L); 3 实 验 报 告 附 页 printf(\输出求交后的顺序表 的值: \ Print(Lc); break; case 10:printf(\创建一个新的顺序表!\\n\ SeqList Lb; La.n=0; initList(Lb); Creat(Lb); Intersection(Lb,L); printf(\输出求交后的顺序表的值: \ Print(Lb); break; case 11: printf(\ printf(\ exit(1); } printf(\再次输入选择:\ scanf(\ } } 程序运行结果如下: 2、对刚建立的表实现插入、删除、修改、查找,并将结果在屏幕上输出。 4 实 验 报 告 附 页 查找: 插入: 删除: 二、实验总结 第一次建立一个头文件,然后进行主函数的调用,在这个过程中,由于在编辑源代码时,除了很多错,导致编译时有很多的错误。同时由于对出错的信息不实很了解,在改错的过程中,有进一步了解了c语言的语法规则。并懂得了顺序表的运算模式。 5