计算机科学与工程学院(院、系)计算机科学与技术 专业 计机092班 组 数据结构课
学号 姓名 实验日期 2010.09.19 教师评定
一、实验目的
1)掌握线性表的顺序存储结构;
2)熟练掌握顺序表基本算法的实现;
3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;
4)按照实验题目要求正确地完成实验内容
二、实验内容
要求:数据元素类型ElemType 取整型int 或者char。顺序存储实现如下算法:
1)创建一顺序表;
2)输出该顺序表;
3)在顺序表中查找第i 个元素,并返回其值;
4)在顺序表中第i 个元素之前插入一已知元素;
5)在顺序表中删除第i 个元素;
6)实现合并顺序表的。(选做)
源程序:
#include #include #include #define MAX 30 //定义线性表的最大长度 enum BOOL{False,True}; //定义BOOL型 typedef struct{ char elem[MAX]; //线性表 int last; //last指示当前线性表的长度 }sqlisttp; void initial(sqlisttp &); //初始化线性表 BOOL insert(sqlisttp &,int,char); //在线性表中插入元素 BOOL del(sqlisttp&,int,char &); //在线性表中删除元素 void print(sqlisttp); //显示线性表中所有元素 void main() {sqlisttp S; //S为一线性表 int loc,flag=1; char j,ch; BOOL temp; //---------------------------程序解说-------------------------- printf("本程序用来实现顺序结构的线性表。\\n"); printf("可以实现查找、插入、删除等操作。\\n"); //------------------------------------------------------------- initial(S); //初始化线性表 while(flag) { printf("请选择:\\n"); printf("1.显示所有元素\\n"); printf("2.插入一个元素\\n"); printf("3.删除一个元素\\n"); printf("4.退出程序 \\n"); scanf(" %c",&j); switch(j) {case '1':print(S); break; //显示所有元素 case '2':{printf("请输入要插入的元素(一个字符)和插入位置:\\n"); printf("格式:字符,位置;例如:a,2\\n"); scanf(" %c,%d",&ch,&loc); //输入要插入的元素和插入的位置 temp=insert(S,loc,ch); //插入 if(temp==False) printf("插入失败!\\n"); //插入失败 else {printf("插入成功!\\n"); print(S);} //插入成功 break; } case '3':{printf("请输入要删除元素的位置:"); scanf("%d",&loc); //输入要删除的元素的位置 temp=del(S,loc,ch); //删除 if(temp==True) printf("删除了一个元素:%c\\n",ch); //删除成功 else printf("该元素不存在!\\n"); //删除失败 print(S); break; } default:flag=0;printf("程序结束,按任意键退出!\\n"); } } getch(); } void initial(sqlisttp &v) {//初始化线性表 int i; printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度 scanf("%d",&v.last); printf("请输入从1到%d的各元素(字符),例如:abcdefg\\n",v.last); getchar(); for(i=0;i BOOL insert(sqlisttp &v,int loc,char ch) {//插入一个元素,成功返回True,失败返回False int i; if((loc<1)||(loc>v.last+1)) {printf("插入位置不合理!\\n"); //位置不合理 return False; } else if(v.last>=MAX) //线性表已满 {printf("线性表已满!\\n"); return False; } else {for(i=v.last-1;i>=loc-1;i--) v.elem[i+1]=v.elem[i];//其后元素依次后移 v.elem[loc-1]=ch; //插入元素 v.last++; //线性表长度加一 return True; } } BOOL del(sqlisttp &v,int loc,char &ch) {//删除一个元素,成功返回True,并用ch返回该元素值,失败返回False int j; if(loc<1||loc>v.last) //删除位置不合理 return False; else {ch=v.elem[loc-1]; //ch取得该元素值 for(j=loc-1;j return True; } } void print(sqlisttp v) //显示当前线性表所有元素 {int i; for(i=0;i } 运行截图: 主菜单: 1.创建顺序表与输入数据; 2.插入数据: 3. 删除数据 三、实验总结: 问题: 1.接触数据结构时,一脸茫然,通过反复看书,最后逐渐明白了其中的含义。 2.有些c语言的函数和c++语言函数不同。 3.3.delete(L,j)函数,在VC中delete是关键字不能用作函数名,还有一些的问题都是C语言上的小问题,只要多加练习就会掌握它的解决方法。 心得体会; 数据结构是一门重要的课程,这是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第一节课起,就为我们阐述了它的重要性。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。首次做数据结构的实验是对C语言的复习,由于很久没有用C语言的原因,显得有点陌生了,但是经过多做实验多次运行程序,对自己学好的信心是越来越足,当自己完成一道程序感觉很满足。对于C语言的学习就得在实践中去摸索学习。