顺序表的基本操作插入删除合并Word格式.docx
《顺序表的基本操作插入删除合并Word格式.docx》由会员分享,可在线阅读,更多相关《顺序表的基本操作插入删除合并Word格式.docx(9页珍藏版)》请在冰点文库上搜索。
![顺序表的基本操作插入删除合并Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/a9db8761-cad6-494b-94eb-edf641818a80/a9db8761-cad6-494b-94eb-edf641818a801.gif)
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);
length=0;
listsize=LIST_INIT_SIZE;
returnOK;
}
/*------------顺序表L插入----------*/
StatusListInsert_Sq(sqlist*L,inti,ElemTypee)
ElemType*newbase,*p,*q;
if(i<
1||i>
length+1)returnERROR;
if(L->
length>
=L->
listsize)
{
newbase=(ElemType*)realloc(L->
elem,(L->
listsize+LISTINCREMENT)*sizeof(ElemType));
newbase)exit(OVERFLOW);
elem=newbase;
listsize=L->
listsize+LISTINCREMENT;
}
q=&
(L->
elem[i-1]);
for(p=&
elem[L->
length-1]);
p>
=q;
--p)*(p+1)=*p;
*q=e;
++L->
length;
/*------------顺序表L删除----------*/
StatusListDelete_Sq(sqlist*L,inti,ElemType*e)
ElemType*p,*q;
length)returnERROR;
p=&
*e=*p;
q=L->
elem+L->
length-1;
/*printf("
%d,%d,%d,%d"
p,L->
elem,L->
length,q);
*/
for(++p;
p<
++p)*(p-1)=*p;
--L->
/*-----------合并----------*/
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"
;
Listsize:
%d\n\n"
error!
/*------------------INIT-----------------*/
Lb))
Lc))
/*--------------顺序表La输入初始值---------------*/
PleaseinputthevaluesofLa:
for(i=1;
i<
=n;
i++)
scanf("
%d"
&
e);
if(ListInsert_Sq(&
La,i,e)!
=OK)break;
=;
e[%d]=%d\n"
i-1,[i-1]);
/*-------------INSERT-----------------*/
Pleaseinputtheplaceofinsert:
scanf("
i);
Pleaseinputtheelemvalue:
e);
La,i,e)==OK)
/*-------------DELETE----------------*/
Pleaseinputtheplaceofdelete:
if(ListDelete_Sq(&
La,i,&
e)==OK)
Thedeletedelemis:
e);
/*--------------顺序表Lb输入初始值---------------*/
PleaseinputthevaluesofLb:
Lb,i,e)!
/*--------------合并---------------*/
=+;
Mergelist(La,Lb,Lc);
\n合并后的数组为\n"
(3)主函数中调用以上算法,完成如下功能:
建立一个空表La,输入一组元素序列。
输入插入位置及元素值,完成插入操作,并输出插入后顺序表。
输入删除元素位序,完成删除操作,输出删除元素值及删除后顺序表。
建立另一个顺序表Lb,并输入元素。
调用合并算法,将La,Lb合并成Lc,输出合并后Lc