顺序表的基本操作实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除顺序表的基本操作实验报告
篇一:顺序表的基本操作--实验报告
实验报告
附:源程序:
#include
#definemaxsize100
#defineerror0
#defineok1
typedefstruct
{
intelem[maxsize];intlast;}seqList;
intInsList(seqList*L,inta,inti);
intLocate(seq
ListL,inte);
intDel(seqList*L,inti);
voidmain()
{
inti,e,a;intlist1,list2;
if(L.elem[st]==-1)seqListL;st=0;for(i=0;i list1=InsList(if(list1){}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",printf("插入后的顺序表为:\n");for(i=0;i list2=Locate(L,e);
if(!list2)printf("该元素不存在\n");
}printf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?
\n");intm;scanf("%d",if(m){Del(printf("删除后的顺序表为:\n");for(i=0;i
intInsList(seqList*L,inta,inti)//i位置,下标i-1{
for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];in tp;if(L->last>=maxsize-1){}printf("表已满,无法插入");return(error);L->elem[i-1]=a;L->last++;return(ok );
intLocate(seqListL,inte){
}
intDel(seqList*L,inti){
}for(k=i;klast;k++)L->elem[k-1]=L->elem[k];intk ;inti=0;while((ilast--;returnok;
篇二:线性表的基本操作实验报告
实验一:线性表的基本操作
【实验目的】
学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。
对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。
【实验内容】
1.顺序表的实践
1)建立4个元素的顺序表s=sqlist[]={1,2,3,4,5},实现顺序表建立的基本操作。
2)在sqlist[]={1,2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在sqlist[]={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践
3.1)建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链表建立的基本操作。
2)将该单链表的所有元素显示出来。
3)在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插入的基本操作。
4)在一个包括头结点和5个结点的(5,4,3,2,1)的单链表的指定位置(如i=2)删除一个结点,实现单链表删除的基本操作。
5)实现单链表的求表长操作。
【实验步骤】
1.打开Vc++。
2.建立工程:点File->new,选project标签,在列表中选win32consoleApplication,再在右边的框里为工程起好名字,选好路径,点oK->finish。
至此工程建立完毕。
3.创建源文件或头文件:点File->new,选File标签,在列表里选c++sourceFile。
给文件起好名字,选好路径,点oK。
至此一个源文件就被添加到了刚创
建的工程之中。
4.写好代码
5.编译->链接->调试
1、#include"stdio.h"
#include"malloc.h"
#defineoK1
#defineoVeRFLow-2
#defineeRRoR0
#defineLIsT_InIT_sIZe100
#defineLIsTIncRemenT10
typedefintelemType;
typedefintstatus;
typedefstruct{
elemType*elem;intlength;intlistsize;
}sqList;
statusInitList(sqList
L.elem=(elemType*)malloc(LIsT_InIT_sIZe*sizeof(elem Type));if(!L.elem)return(oVeRFLow);
printf("输入元素的个数:");
scanf("%d",
printf("输入各元素的值:");
for(i=0;i scanf("%d",
L.length=n;
L.listsize=LIsT_InIT_sIZe;
returnoK;
}
statusListInsert(sqList
if(iL.length+1)returneRRoR;if(L.length>=L.listsize) {newbase=(elemType*)realloc(L.elem,(L.listsize+LIsT IncRemenT)*sizeof(elemType));
if(!newbase)return(oVeRFLow);
L.elem=newbase;
L.listsize+=LIsTIncRemenT;
}
q=
for(p=p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
returnoK;
}
statusListDelete(sqList
}
voidVisitList(sqListL)if((iL.length))returneRRoR;p= e=*p;q=L.elem+L.length-1;for(++p;p {inti;
for(i=0;i printf("%d\t",L.elem[i]);
}
voidmain()
{
inti,e;sqListL;
InitList(L);
VisitList(L);
printf("输入插入位置和值:");
scanf("%d,%d",
printf("插入元素后,表中的值:"); ListInsert(L,i,e);
VisitList(L);
printf("输入删除位置:");
scanf("%d",
printf("删除元素后,表中的值:"); ListDelete(L,i,e);
VisitList(L);
}
2、#include"stdio.h"
#include"malloc.h"
#defineoK1
#defineoVeRFLow-2
#defineLIsT_InIT_sIZe100
#defineLIsTIncRemenT10 typedefintelemType; typedefintstatus;
typedefstruct{
elemType*elem;intlength;intlistsize;
}sqList;
statusInitList(sqList
L.elem=(elemType*)malloc(LIsT_InIT_sIZe*sizeof(elem Type));if(!L.elem)return(oVeRFLow);
printf("输入元素的个数:");
scanf("%d",
printf("输入各元素的值:");
for(i=0;i scanf("%d",
L.length=n;
L.listsize=LIsT_InIT_sIZe;
returnoK;
}
voidVisitList(sqListL)
{inti;
for(i=0;i printf("%d\t",L.elem[i]);
}
voidmain()
{
sqListL;
InitList(L);
VisitList(L);
篇三:顺序表的操作实验报告
顺序表的基本操作
一、实验目的
1、复习c++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现。
4、掌握顺序表的存储结构形式及其描述和基本运算的实现。
5、熟练掌握动态链表结构及有关算法的设计
二、实验内容
实现顺序表的建立、取元素、修改元素、插入、删除等顺序表的基本操作。
[基本要求]
(1).依次从键盘读入数据,建立带头结点的顺序表;
(2).输出顺序表中的数据元素
(3).根据指定条件能够取元素和修改元素;
(4).实现在指定位置插入和删除元素的功能。
三、实验步骤、调试及输出结果
(—).数据结构与核心算法的设计描述:
#include
#include
/*顺序表的定义:*/
#defineListsize100
typedefstruct
{intelem[Listsize];/*向量elem用于存放表结点*/ intlength;
}seqList;
/*顺序表的建立:*/
voidcreateList(seqList*L,intn)
{inti;
printf("pleaseinputnnumbers:\n");
for(i=1;i scanf("%d",
L->length=n;
}/*当前的表长度*/
/*顺序表的打印:*/
voidprintList(seqList*L,intn)
{inti;
printf("thesqlistis\n");
for(i=1;i printf("%d",L->elem[i]);
printf("\n");
}
/*顺序表的查找:*/
intLocateList(seqList*L,intx)
{inti;
i=1;
while(((L->elem[i])!=x)
if((L->elem[i])==x)return(i); elsereturn(0);
}
/*顺序表的插入:*/
voidInsertList(seqList*L,intx,inti) {intj;
if(iL->length+1)
printf("noinsertposition!\n");
else
{for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];
L->elem[i]=x;
L->length++;
}
}
/*顺序表的删除:*/
voidDeleteList(seqList*L,inti) {intj;
if(iL->length)
printf("nodeleteposition!\n");
else
{for(j=i;jlength)-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
}
}
voidmain()
{
seqListL;
inti,x;
intn=10;/*当前顺序表的长度*/
L.length=0;
createList(/*建立顺序表*/
printList(/*输出顺序表*/
printf("inputtheresearchelement:"); scanf("%d",
i=LocateList(/*顺序表查找*/
printf("theresearchpositionis%d\n",i); printf("inputthepositionofinsert:"); scanf("%d",
printf("inputthevalueofinsert:"); scanf("%d",
InsertList(/*顺序表插入*/
printList(/*输出顺序表*/
printf("inputthepositionofdelete:");
scanf("%d",
DeleteList(/*顺序表删除*/
printList(/*输出顺序表*/
}
(二).调试及输出结果
测试数据:1、输入n个数;2、输出顺序列表;3、顺
序表的查找;4.顺序表的插入;5、顺序表的删除;
数据测试如下截图:
四、实验讨论与总结:
通过这次写实验报告,我深切的理解了这门课的本质。
刚开始学这门课时,当时还不清楚这门课程的目的,现在,我真正的理解了:数据结构像是身体的骨骼。
数据结构是个框架,模型,抽象数据类型中列举了各种操作,而所用的c++语言,将各种操作描述出来构成算法。
在这次设计的过程中,我知道了顺序表是按顺序存储的,用了一维数组来存储,但是,在执行时出现了问题。
后来问同学,指出我的错误,不过获益不少。
我又重新整理思路,把顺序表的基本操作写好了。
虽然走了很多弯路,但是让我认识到,一定要创新,大胆,不能按照旧的思路去干新的事
情。
单链表写起来简单多了,这个很快就搞定了。
但是细节上出了问题。
比如说,有些变量的重复定义,有些变量又没有定义,在调用函数,就直接复制过来,没有改参数……通过修改,我深刻理解到:细节决定成败,在以后,不管做任何事情都要认真,细心。
这次的实验报告,让我受益匪浅,不仅有知识方面的,还有生活和精神上的。
总之,我会继续我的兴趣编程,相信在编程的过程中,能不断的提高自己。