数据结构题库程序填空上海杉达学院期末总复习题Word文件下载.docx
- 文档编号:15369399
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:33
- 大小:31.70KB
数据结构题库程序填空上海杉达学院期末总复习题Word文件下载.docx
《数据结构题库程序填空上海杉达学院期末总复习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构题库程序填空上海杉达学院期末总复习题Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
2.求单链表的长度
typedefstructlnode{
elemtpdata;
structlnode*next;
}lnode,*linkisttp;
intlength(linkisttpL)
{p=L->
next;
len=0;
while(p)
{len++;
p=p->
}
returnlen;
3.假设head1指向带有头结点的单链表,现将该单链表复制一个。
voidcopy(pointerhead1,&
head2)
{head2=(pointer)malloc(sizeof(pnode));
//建立一个头结点
q=head2;
p=head1;
while(p!
=NULL)//复制一个新结点
{s=(pointer)malloc(sizeof(pnode));
s->
data=p->
data;
q->
next=s;
q=q->
}
q->
next=NULL;
//置最后一个结点的next域
4.把两个递增的单链表LA,LB合并成一个递减的单链表LC。
题中链表都不带表头结点。
#include<
stdio.h>
structnodetype{intdata;
structnodetype*link;
}node;
structnodetype*la,*lb,*lc;
voidmerge()
{structnodetype*p;
lc=NULL;
while(la!
=NULL)&
(lb!
=NULL)
{if(la->
data<
lb->
data)
{p=la;
la=la->
p->
link=lc;
lc=p;
else{p=lb;
lb=lb->
p->
link=lc;
if(la==NULL)la=lb;
while(la!
{p=la;
lc=p;
5.有两个向量A(有m个元素)和B(有n个元素),其元素均以从小到大的升序排列,编写一个过程将它们合并成一个向量C,使得C的元素也按升序排列。
typedefvector=datatype[n0];
voidlink(vectorA,B,&
C;
intm,n)
{i=1;
j=1;
k=1;
while(i<
=m&
j<
=n)
if(A[i]<
B[j])
{C[k]=A[i];
i++;
k++;
else
{C[k]=B[j];
j=j+1;
k=k+1;
if(j==n)
for(;
i<
=m;
++i)
k=k+1;
if(i==m)
for(l=j;
l<
=n;
l++)
{C[k]=B[l];
k++;
6.本算法的功能是:
向顺序存储的有序表L中插入一个新元素x,使表中数据仍按升序排列。
typedefstructsqlisttp
{Elemtpelem[maxlen];
intlast;
}sqlisttp;
voidsample(sqlisttp&
L,Elemtpx)
{if(L.last==maxlen)
exit(‘OVERFLOW’);
i=0;
while(L.elem[i]<
=x)&
(i<
L.last)
i++;
for(j=L.last-1;
j>
=i;
j--)
L.elem[j+1]=L.elem[j];
L.elem[i]=x;
L.last++;
7.假设向量中的元素按值非递减有序排列,现删除向量中多余的值相同的元素。
voiddel(inta[],intn)
{i=0;
while(i<
n–1)
if(a[i]!
=a[i+1])i++;
else
{for(j=(i+2);
j<
n;
j++)A[j-1]=A[j];
n=n-1;
8.本算法的功能是:
在一个带表头结点的线性表中(结点的数据值无序排列),删除所有多余值相等的结点。
typedefstructnodetp
{intdata;
structnodetp*next;
}nodetp,*Link;
voidexam(Link&
h)
{q=h->
while(q->
next)
{pre=q;
p=q->
do
{while(p->
data!
=q->
data)
{pre=p;
p=p->
if(p)
{pre->
next=p->
free(p);
p=pre->
}while(p);
q=q->
9.已知线性表中的元素按值递增有序排列,并拥带头结点的单链表L表示,现删除其中重复的多余元素并释放所占空间
}lnode,*linklist;
voiddessame(linklist&
L)
{p=L->
while(p)
{q=p->
while(q&
data==q->
data)
{p->
next=q->
next;
free(q);
q=p->
next;
p=p->
10.假设有两个已排序的单链表a,b,现将它们合并成一个链表c,且不改变其有序性。
typedefstructpnode
{datatypedata;
structpnode*next;
}pnode,*pointer;
voidmerg(pointera,b,&
c)
{h=(pointer)malloc(sizeof(pnode));
h->
r=h;
p=a->
q=b->
while(p!
=NULL)&
(q!
=NULL)
if(p->
data<
=q->
data)
{r->
next=p;
p=p->
r=r->
next=q;
q=q->
};
if(q!
=NULL)(orP=NULL)r->
if(p)r->
c=h;
11.假设循环单链表如下图,下列程序将所有箭头方向取反(类型说明同上)
head
a1
a2
…
an
typedefstructpnode
voidds53(pointerhead)
{p=head;
q=p->
while(p!
=q)
{r=q;
while(r->
next!
=p)r=r->
p->
next=r;
next=head或p->
next=head;
12.本算法的功能是将带头结点的单链表L中的结点前后次序颠倒一下(不包括头结点)。
#defineMAXSIZE10
typedefstructLnode{
floatdata;
structLnode*link;
}Lnode,*LinkList;
voidconverse(LinkList&
L)
{LinkListp,q,r,s;
p=NULL;
q=L->
while(q)
{r=q->
q->
link=p;
p=q;
q=r;
L->
13.把一个头指针为heada的单链表插入到头指针为headb的单链表的第i个元素之前。
{datatypedata;
voidinsert(pointerheada,pointerheadb,inti)
{pb=headb->
while(pb&
j<
i-1)
{pb=pb->
j++;
if(!
pb)returnERROR;
pa=heada->
while(pa->
next
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 题库 程序 填空 上海 学院 期末 复习题