2数据结构实验2顺序表答案Word文件下载.docx
- 文档编号:6286778
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:15
- 大小:110.74KB
2数据结构实验2顺序表答案Word文件下载.docx
《2数据结构实验2顺序表答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《2数据结构实验2顺序表答案Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
2.源程序以及运行结果如下:
#defineMAXSIZE100
#include"
stdio.h"
stdlib.h"
typedefintelemtype;
typedefstruct
{elemtypeelem[MAXSIZE];
intlast;
}SeqList;
SeqList*init_sqlist()
{SeqList*L;
L=(SeqList*)malloc(sizeof(SeqList));
L->
last=-1;
returnL;
}
voidcreatsqlist(SeqList*L)
{inti;
printf("
请输入最后一个元素的下标"
);
scanf("
%d"
&
(L->
last));
请输入%d个元素"
L->
last+1);
for(i=0;
i<
=L->
last;
i++)
scanf("
(*L).elem[i]);
}
intDelList(SeqList*L,inti,elemtype*e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。
i的合法取值为1≤i≤L.last+1*/
{
intk;
if((i<
1)||(i>
L->
last+1))
{
printf("
删除位置不合法!
"
return(0);
*e=L->
elem[i-1];
/*将删除的元素存放到e所指向的变量中*/
for(k=i;
k<
k++)
L->
elem[k-1]=L->
elem[k];
/*将后面的元素依次前移*/
last--;
return
(1);
voidmain()
{inti,x,j;
SeqList*a;
a=init_sqlist();
creatsqlist(a);
printf("
\n建立的顺序表为:
\n"
=a->
i++)
%d"
a->
elem[i]);
\n请问想要删除第几个元素?
j);
if(DelList(a,j,&
x))printf("
\n被删除的元素是%d\n"
x);
/*执行函数调用*/
\n删除后的顺序表为:
for(i=0;
3.源代码如下:
}sqlist;
sqlist*init_sqlist()
{sqlist*L;
L=(sqlist*)malloc(sizeof(sqlist));
voidcreatsqlist(sqlist*L)
请输入线性表的长度\n"
i);
last=i-1;
请输入线性表中的各元素值,注意:
必须有序\n"
scanf("
voidmerge(sqlist*LA,sqlist*LB,sqlist*LC)
{
inti,j,k;
i=0;
j=0;
k=0;
while(i<
=LA->
last&
&
j<
=LB->
last)
if(LA->
elem[i]<
elem[j])
{
LC->
elem[k]=LA->
elem[i];
i++;
k++;
}
else
elem[k]=LB->
elem[j];
j++;
last)/*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
{
LC->
i++;
k++;
while(j<
last)/*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/
elem[k]=LB->
j++;
LC->
last=LA->
last+LB->
last+1;
sqlist*a,*b,c;
\n*******建立顺序表a********\n"
\n建立的顺序表a为:
\n*******建立顺序表b********\n"
b=init_sqlist();
creatsqlist(b);
\n建立的顺序表b为:
=b->
b->
merge(a,b,&
c);
\n合并后的顺序表为:
=c.last;
c.elem[i]);
4.源程序为:
intInsList(sqlist*l,elemtypex)
if(l->
last==MAXSIZE-1)return0;
for(i=l->
l->
elem[i]>
x&
i>
=0;
i--)
elem[i+1]=l->
last++;
elem[i+1]=x;
return1;
voidmain()/*顺序表插入的主函数*/
{inti,x;
sqlist*L;
请输入元素的个数\n"
x);
x;
{L->
elem[i]=i*3;
last=L->
\n建立的顺序表为\n"
\n请输入要插入的数\n"
InsList(L,x);
\n插入元素%d后的顺序表为\n"
i++)printf("
第二部分
1.将顺序表(a1,a2,...,an)重新排列为以a1为界的两部分:
a1前面的值均比a1小,a1后面的值都比a1大(这里假设数据元素的类型具有可比性,不妨设为整型)
基本思路:
从第二个元素开始到最后一个元素,逐一向后扫描:
(1)当前数据元素aI比a1大时,表明它已经在a1的后面,不必改变它与a1之间的位置,继续比较下一个。
(2)当前结点若比a1小,说明它应该在a1的前面,此时将它上面的元素都依次向下移动一个位置,然后将它置入最上方。
源程序如下:
//顺序表结构体类型的定义
sqlist*init_sqlist()//顺序表的初始化
voidcreatsqlist(sqlist*L)//顺序表的建立
请输入顺序表中最后一个元素的下标\n"
(*L).last);
请输入%d个元素\n"
last+1);
=(*L).last;
voidpart(sqlist*L)//顺序表的拆分
{inti,j;
elemtypex,y;
x=L->
elem[0];
/*将基准置入x中*/
for(i=1;
if(L->
x)/*当前元素小于基准*/
{y=L->
for(j=i-1;
j>
j--)/*移动*/
elem[j+1]=L->
elem[j];
elem[0]=y;
voiddayin(sqlist*a)
//顺序表的输出
voidmain()/*顺序表的主函数*/
sqlist*a;
//调用函数对顺序表的初始化
//建立顺序表
建立的顺序表为:
dayin(a);
//输出顺序表
part(a);
//顺序表的拆分
拆分后的顺序表为:
//输出拆分后的线性表
2.编写程序从一给定的顺序表A中删除值在x,y(x<
=y)之间的所有元素。
提示:
1)方法:
逐一比较每个元素的值,若元素值在X,Y之间,则删除。
2)主函数的编写可模仿第一题
voiddele(sqlist*L)//顺序表的删除
intx,y;
请输入要删除的值的下界"
请输入要删除的值的上界"
y);
=x&
=y)
for(j=i;
j++)
elem[j]=L->
elem[j+1];
i--;
//调用函数对顺序进行初始化
dele(a);
//删除顺序表指定范围内的数
删除后的顺序表为:
//输出删除后的线性表
3.编写程序,将给定的顺序表逆置。
例如:
顺序表中的元素为:
247191238
逆置后为:
831291742
voidinver(sqlist*L)//顺序表的逆置
elemtypet;
last/2;
{t=L->
elem[i];
elem[i]=L->
elem[L->
last-i];
last-i]=t;
voidshowsqlist(sqlist*a)
{sqlist*a;
//调用函数对顺序进行初始化
//建立顺序表
showsqlist(a);
//输出顺序表
inver(a);
//逆置顺序表
逆置后的顺序表为:
//输出逆置后的线性表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 顺序 答案