顺序表的基本操作插入删除合并.docx
《顺序表的基本操作插入删除合并.docx》由会员分享,可在线阅读,更多相关《顺序表的基本操作插入删除合并.docx(9页珍藏版)》请在冰点文库上搜索。
顺序表的基本操作插入删除合并
成绩
辽宁工程技术大学上机实验报告
实验名称
顺序表的基本操作的实现
院系
软件学院
专业
软件工程
班级
软件15-3
姓名
ZOE
学号
日期
实验
目的
简述本次实验目的:
1.掌握线性表顺序存储结构的特点。
2.掌握线性表顺序存储结构的基本操作(创建、插入、删除)的实现。
3.通过顺序表有序表的合并的实现,掌握顺序表操作特点。
实验
准备
你为本次实验做了哪些准备:
在课后认真复习,基于上课的基础上,对于线性表的存储,插入,删除,合并等有了一定的了解,对于书上给出的程序反复捉摸,达到了较熟练的程度。
实验
进度
本次共有1个练习,完成个。
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
顺序表初始化、插入、删除算法。
实现两个有序表合并算法.
#include""
#include""
#defineOK1
#defineOVERFLOW-1
#defineERROR0
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefintElemType;
typedefintStatus;
/*----------顺序表的存储结构定义--------*/
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}sqlist;
/*-------------初始化顺序表L----------*/
StatusInitList_sq(sqlist*L)
{
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L->elem)exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
returnOK;
}
/*------------顺序表L插入----------*/
StatusListInsert_Sq(sqlist*L,inti,ElemTypee)
{
ElemType*newbase,*p,*q;
if(i<1||i>L->length+1)returnERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW);
L->elem=newbase;
L->listsize=L->listsize+LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L->length;
returnOK;
}
/*------------顺序表L删除----------*/
StatusListDelete_Sq(sqlist*L,inti,ElemType*e)
{
ElemType*p,*q;
if(i<1||i>L->length)returnERROR;
p=&(L->elem[i-1]);
*e=*p;
q=L->elem+L->length-1;
/*printf("%d,%d,%d,%d",p,L->elem,L->length,q);*/
for(++p;p<=q;++p)*(p-1)=*p;
--L->length;
returnOK;
}
/*-----------合并----------*/
voidMergelist(sqlistLa,sqlistLb,sqlistLc)
{
inti,j,k;
i=j=k=0;
while((i<&&(j<)
{
if[i]<[j])
{
[k++]=[i++];
}
else
[k++]=[j++];
}
while(i<
[k++]=[i++];
while(j<
[k++]=[j++];
}
/*-----------main函数----------*/
main()
{
sqlistLa,Lb,Lc;
inti;
intn=5;
ElemTypee;
/*------------------INIT-----------------*/
if(InitList_sq(&La))
{
printf("Initisok!
\n");
printf("Length:
%d\n",;
printf("Listsize:
%d\n\n",;
}
else
printf("error!
");
/*------------------INIT-----------------*/
if(InitList_sq(&Lb))
{
printf("Initisok!
\n");
printf("Length:
%d\n",;
printf("Listsize:
%d\n\n",;
}
else
printf("error!
");
/*------------------INIT-----------------*/
if(InitList_sq(&Lc))
{
printf("Initisok!
\n");
printf("Length:
%d\n",;
printf("Listsize:
%d\n\n",;
}
else
printf("error!
");
/*--------------顺序表La输入初始值---------------*/
printf("PleaseinputthevaluesofLa:
\n");
for(i=1;i<=n;i++)
{
scanf("%d",&e);
if(ListInsert_Sq(&La,i,e)!
=OK)break;
}
for(i=1;i<=;i++)
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length:
%d\n\n",;
/*-------------INSERT-----------------*/
printf("Pleaseinputtheplaceofinsert:
\n");
scanf("%d",&i);
printf("Pleaseinputtheelemvalue:
\n");
scanf("%d",&e);
if(ListInsert_Sq(&La,i,e)==OK)
{
for(i=1;i<=;i++)
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length:
%d\n\n",;
}
/*-------------DELETE----------------*/
printf("Pleaseinputtheplaceofdelete:
\n");
scanf("%d",&i);
if(ListDelete_Sq(&La,i,&e)==OK)
printf("Thedeletedelemis:
%d\n",e);
for(i=1;i<=;i++)
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length:
%d\n",;
/*--------------顺序表Lb输入初始值---------------*/
printf("PleaseinputthevaluesofLb:
\n");
for(i=1;i<=n;i++)
{
scanf("%d",&e);
if(ListInsert_Sq(&Lb,i,e)!
=OK)break;
}
for(i=1;i<=;i++)
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length:
%d\n\n",;
/*--------------合并---------------*/
=+;
Mergelist(La,Lb,Lc);
for(i=1;i<=;i++)
printf("\n合并后的数组为\n");
printf("e[%d]=%d\n",i-1,[i-1]);
printf("Length:
%d\n\n",;
}
(3)主函数中调用以上算法,完成如下功能:
建立一个空表La,输入一组元素序列。
输入插入位置及元素值,完成插入操作,并输出插入后顺序表。
输入删除元素位序,完成删除操作,输出删除元素值及删除后顺序表。
建立另一个顺序表Lb,并输入元素。
调用合并算法,将La,Lb合并成Lc,输出合并后Lc