顺序表的基本操作插入删除合并Word文档格式.docx
- 文档编号:16272714
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:10
- 大小:54.98KB
顺序表的基本操作插入删除合并Word文档格式.docx
《顺序表的基本操作插入删除合并Word文档格式.docx》由会员分享,可在线阅读,更多相关《顺序表的基本操作插入删除合并Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
进度
本次共有 1 个练习,完成 个。
总结
日
本次实验的收获、体会、经验、问题和教训:
顺序表初始化、插入、删除算法。
实现两个有序表合并算法。
#include"malloc.h”
#include "stdlib.h"
#define OK1
#defineOVERFLOW—1
#define ERROR 0
#defineLIST_INIT_SIZE 100
#defineLISTINCREMENT10
typedefint ElemType;
typedefintStatus;
/*—-—----—--顺序表的存储结构定义-—-———--*/
typedef struct{
ElemType*elem;
intlength;
int listsize;
}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插入—-————————*/
Status ListInsert_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;
return OK;
}
/*-————-——--——顺序表L删除——————-——-*/
StatusListDelete_Sq(sqlist*L,int i,ElemType *e)
{
ElemType *p,*q;
if(i<
1||i>
L->
length)return ERROR;
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<
++p)*(p-1)=*p;
—-L->
length;
returnOK;
/*--———---—-—合并-—-—-———-—*/
voidMergelist(sqlist La,sqlistLb,sqlistLc)
ﻩinti,j,k;
ﻩi=j=k=0;
ﻩ
while((i〈La.length)&
&(j<Lb。
length))
{
if(La。
elem[i]<Lb.elem[j])
{
ﻩLc。
elem[k++] =La。
elem[i++];
}
else
Lc。
elem[k++]=Lb。
elem[j++];
}
while(i<
La。
length)
Lc.elem[k++]=La.elem[i++];
while(j<Lb.length)
Lc.elem[k++]=Lb.elem[j++];
}
/*——-—--——-—-main函数-——-—-—-—-*/
main()
sqlistLa,Lb,Lc;
int i;
intn=5;
ElemTypee;
/*-—--——-------—-—-—INIT-——————--—---——--*/
if(InitList_sq(&La))
{
printf("Init isok!
\n”);
printf("
Length:
%d\n"
La。
length);
printf(”Listsize:
%d\n\n",La。
listsize);
}
else
printf("
error!
");
/*--———-—-—--————-——INIT—————————-——-----*/
if(InitList_sq(&
Lb))
{
ﻩprintf(”Initisok!
\n"
);
printf(”Length:
%d\n"
,Lb.length);
printf("
Listsize:
%d\n\n”,Lb.listsize);
}
else
printf(”error!
”);
/*——--———-————-———--INIT----—-————--—--—-*/
if(InitList_sq(&
Lc))
printf("
Initisok!
\n”);
printf("
Length:
%d\n”,Lc.length);
printf(”Listsize:
%d\n\n”,Lc.listsize);
else
printf(”error!
”);
/*-——-—--———-—--顺序表La输入初始值-—-————--—---—-*/
printf("
Pleaseinput thevaluesofLa:
for(i=1;
i<
=n;
i++)
scanf(”%d"
&
e);
if(ListInsert_Sq(&La,i,e)!
=OK)break;
for(i=1;
=La。
length;
i++)
printf("
e[%d]=%d\n"
i-1,La。
elem[i-1]);
printf(”Length:
%d\n\n",La.length);
/*------—---—-—INSERT-——-——--—-—-——-——*/
printf("
Pleaseinputtheplaceofinsert:
\n”);
scanf(”%d”,&
i);
printf(”Pleaseinputtheelemvalue:
\n"
);
scanf(”%d”,&
e);
if(ListInsert_Sq(&
La,i,e)==OK)
{
for(i=1;
i〈=La.length;
printf("
e[%d]=%d\n”,i—1,La.elem[i—1]);
printf(”Length:
%d\n\n”,La。
length);
/*---————-——--—DELETE————-—--———-———-*/
printf(”Pleaseinputtheplace of delete:
\n");
scanf(”%d”,&
if(ListDelete_Sq(&La,i,&e)==OK)
printf("
The deletedelemis:
,e);
for(i=1;
i<=La。
length;
i++)
printf(”e[%d]=%d\n"
i-1,La。
elem[i—1]);
printf("
Length:
%d\n",La.length);
/*-——--—-——————-顺序表Lb输入初始值—-——-——-———--—-*/
printf("
Pleaseinputthe valuesofLb:
for(i=1;
i〈=n;
i++)
{
scanf(”%d",&
e);
if(ListInsert_Sq(&Lb,i,e)!
=OK) break;
}
for(i=1;
=Lb.length;
printf("
e[%d]=%d\n”,i—1,Lb.elem[i—1]);
printf(”Length:
%d\n\n”,Lb.length);
/*-----—-————--—合并--—----—---—-——*/
Lc。
length=La。
length+Lb.length;
Mergelist(La,Lb,Lc);
for(i=1;
i<=Lc。
length;
printf("
\n合并后的数组为\n"
printf("
e[%d]=%d\n”,i—1,Lc。
elem[i-1]);
printf("
Length:
%d\n\n”,Lc。
length);
(3)主函数中调用以上算法,完成如下功能:
建立一个空表La,输入一组元素序列.
输入插入位置及元素值,完成插入操作,并输出插入后顺序表。
输入删除元素位序,完成删除操作,输出删除元素值及删除后顺序表。
建立另一个顺序表Lb,并输入元素。
调用合并算法,将La,Lb合并成Lc,输出合并后Lc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 基本 操作 插入 删除 合并