最新华南农业大学数据结构实验答案包含STL版Word文件下载.docx
《最新华南农业大学数据结构实验答案包含STL版Word文件下载.docx》由会员分享,可在线阅读,更多相关《最新华南农业大学数据结构实验答案包含STL版Word文件下载.docx(115页珍藏版)》请在冰豆网上搜索。
//输出顺序表中的所有元素
inti;
if(_________________________)printf("
TheListisempty!
"
);
//请填空
else
{
printf("
TheListis:
"
for(_________________________)printf("
%d"
_________________________);
}
printf("
\n"
returnOK;
intListInsert_Sq(SqList&
L,inti,inte)
//算法2.4,在顺序线性表L中第i个位置之前插入新的元素e
//i的合法值为1≤i≤L.length+1
intListDelete_Sq(SqList&
L,inti,int&
e)
//算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值
//i的合法值为1≤i≤L.length
intmain()
SqListT;
inta,i;
ElemTypee,x;
if(_________________________)//判断顺序表是否创建成功
ASequenceListHasCreated.\n"
while
(1)
1:
Insertelement\n2:
Deleteelement\n3:
Loadallelements\n0:
Exit\nPleasechoose:
scanf("
%d"
&
a);
switch(a)
{
case1:
scanf("
%d%d"
i,&
x);
if(_________________________)printf("
InsertError!
//判断i值是否合法,请填空
elseprintf("
TheElement%disSuccessfullyInserted!
x);
break;
case2:
i);
DeleteError!
TheElement%disSuccessfullyDeleted!
e);
case3:
Load_Sq(T);
case0:
return1;
}
输入格式
测试样例格式说明:
根据菜单操作:
1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开
2、输入2,表示要实现删除操作,紧跟着要输入删除的位置
3、输入3,表示要输出顺序表的所有元素
4、输入0,表示程序结束
输入样例
1
12
13
2
3
输出样例
ASequenceListHasCreated.
Insertelement
2:
Deleteelement
3:
Loadallelements
0:
Exit
Pleasechoose:
TheElement2isSuccessfullyInserted!
TheElement3isSuccessfullyInserted!
TheElement3isSuccessfullyDeleted!
2
作者
yqm
解法一:
(正规解法)
#defineOK1
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
L.listsize=LIST_INIT_SIZE;
return0;
if(L.length==0)printf("
for(i=0;
i<
L.length;
i++)printf("
L.elem[i]);
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));
L.elem=newbase;
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;
ElemType*p,*q;
L.length)returnERROR;
p=&
e=*p;
q=L.elem+L.length-1;
for(++p;
p<
++p)
*(p-1)=*p;
--L.length;
if(!
InitList_Sq(T))//判断顺序表是否创建成功
if(!
ListInsert_Sq(T,i,x))printf("
ListDelete_Sq(T,i,e))printf("
解法二:
(C++STLlist)
list>
usingnamespacestd;
list<
int>
T;
inte,x;
switch(a)
case1:
(int)T.size()+1)printf("
//判断i值是否合法
intj=1,p=0;
:
iteratoriter=T.begin();
if(i==1)
T.push_front(x);
p=1;
while(iter!
=T.end())
if(j==i&
&
i!
=1)
T.insert(iter,x);
iter++;
break;
j++;
p)
T.push_back(x);
case2:
(int)T.size())printf("
intj=1;
iteratoriter;
for(iter=T.begin();
iter!
=T.end();
++iter)
if(j==i)
iteratortmp;
tmp=iter;
e=*iter;
T.erase(tmp);
case3:
if(T.empty())
iteratorplist;
for(plist=T.begin();
plist!
=T.end();
plist++)
*plist);
case0:
解法三:
(数组)
string.h>
intT[1000];
memset(T,0,sizeof(T));
inta,i,k=1,e,x;
k)printf("
for(intj=k-1;
j>
=i;
j--)
T[j+1]=T[j];
T[i]=x;
k++;
k-1)printf("
e=T[i];
for(intj=i;
j<
k;
j++)
T[j]=T[j+1];
k--;
if(k==1)printf("
for(intj=1;
j++)printf("
T[j]);
8577合并顺序表
5339通过次数:
2251
编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。
本题不提供代码,请同学们独立完成,所需子函数参考前面完成的内容。
第一行:
顺序表A的元素个数
第二行:
顺序表A的各元素(非递减),用空格分开
第三行:
顺序表B的元素个数
第四行:
顺序表B的各元素(非递减),用空格分开
输出格式
顺序表A的元素列表
顺序表B的元素列表
合并后顺序表C的元素列表
5
13579
246810
ListA:
13579
ListB:
246810
ListC:
12345678910
stdlib.h>
#defineOVERFLOW-2
}SqList;
L,intn)
L.elem=(ElemType*)malloc(n*sizeof(ElemType));
L.listsize=n;
L.length=n;
for(i=0;
i<
i++)
L.elem[i]);
if(L.length==0)return0;
L.length-1;
L.elem[L.length-1]);
//if(ch=='
A'
)ch='
B'
;
//elseif(ch=='
C'
voidmergeList_Sq(SqListLa,SqListLb,SqList&
Lc)
int*pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
Lc.elem)exit(OVERFLOW);
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<
=pa_last&
pb<
=pb_last)
if(*pa<
=*pb)
*pc++=*pa++;
*pc++=*pb++;
=pa_last)
while(pb<
SqListT,R,Y;
inta,b;
InitList_Sq(T,a);
b);
InitList_Sq(R,b);
mergeList_Sq(T,R,Y);
Load_Sq(R);
Load_Sq(Y);
解法二(C++STLlist)
voidload(list<
L)
for(plist=L.begin();
=L.end();
T,R;
inta,b,x;
for(inti=0;
a;
b;
R.push_back(x);
load(T);
load(R);
T.merge(R);
intInitList_Sq(intL[],intn)
n;
L[i]);
intLoad_Sq(intL[],intn)
if(n==0)return0;
L[i]);
voidmergeList_Sq(inta[],intb[],intc[],inta_length,intb_length)
inti=0,j=0,k=0;
while(i<
a_len