数据结构算法设计题复习题Word格式.doc
- 文档编号:13169067
- 上传时间:2022-10-07
- 格式:DOC
- 页数:11
- 大小:49.50KB
数据结构算法设计题复习题Word格式.doc
《数据结构算法设计题复习题Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构算法设计题复习题Word格式.doc(11页珍藏版)》请在冰豆网上搜索。
i=1;
j=h;
while(i<
j){
while(i<
j&
&
a[j]>
=x)j--;
=x)i++;
if(i<
j)
{t=a[j];
a[j]=a[i];
a[i]=t;
}
if(a[i]<
x)returni;
elsereturni-1;
(1)写出该函数的功能;
(2)写一个调用上述函数实现下列功能的算法:
对一整型数组b[n]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个
数。
(1)该函数的功能是:
调整整数数组a[]中的元素并返回分界值i,使所有<x的元素均落在a[1..i]上,使所有≥x的元素均落在a[i+1..h]上。
(2)intf(intb[],intn)或intf(intb[],intn)
{{
intp,q;
intp,q;
p=arrange(b,0,n-1,0);
p=arrange(b,0,n-1,1);
q=arrange(b,p+1,n-1,1);
q=arrange(b,0,p,0);
returnq-p;
returnp-q;
}}
3.假设线性表以带表头结点的循环单链表表示。
试设计一个算法,在线性表的第k个元素前插入新元素y。
假如表长小于k,则插在表尾。
voidalgo1(LNode*h,intk,ElemTypey){
q=h;
P=h->
next;
j=1;
while(p!
=h&
j<
k){
q=p;
p=p->
j++;
s=(LNode*)malloc(sizeof(Lnode));
s->
data=y;
q->
next=s;
next=q;
}
4.二叉排序树的类型定义如下:
typedefstructBSTNode{∥二叉排序树的结点结构
intdata;
∥数据域
structBSTNode*lchild,*rchild;
∥左、右孩子指针
}BSTNode,*BSTree;
设计递归算法,统计一棵二叉排序树T中值小于a的结点个数。
intf34(BSTreeroot)
{
intcount;
BSTNode*p;
p=root;
if(p&
p->
data<
a)count++;
f34(p->
returncount;
5.设二叉树T采用二叉链表结构存储,试设计算法求出二叉树中离根最近的第一个叶子结点。
(注:
结点按从上往下,自左
至右次序编号)
BTNode*Firstleaf(BTNode*bt)
{InitQueue(Q);
//初始化队列Q
if(bt){
EnQueue(Q,bt);
;
while(!
EmptyQueue(Q)){
DeQueue(Q,p);
if(!
p->
lchild&
!
rchild)returnp;
if(p->
lchild)EnQueue(Q,p->
rchild)EnQueue(Q,p->
}
6.已知一棵具有n个结点的完全二叉树被顺序存储在一维数组中,结点为字符类型,编写算法打印出编号为k的结点的双亲和孩子结点。
intalgo2(charbt[],intn,intk){
if(k<
1||k>
n)return0;
if(k==1)printf(“%cisaroot\n”,bt[1]);
elseprintf(“%c’sparentis%c\n”,bt[k],bt[k/2]);
if(2*k<
=n)printf(“%c’slchildis%c\n”,bt[k],bt[2*k]);
elseprintf(“%cisnotlchild\n”,bt[k]));
if(2*k+1<
=n)printf(“%c’srchildis%c\n”,bt[k],bt[2*k+1]);
elseprintf(“%cisnotrchild\n”,bt[k]));
return1;
7.编写算法,将非空单链表hb插入到单链表ha的第i(0<
i≤表长)个结点前。
intalgo1(LNode*ha,LNode*hb,inti){
for(p=hb;
next);
for(j=1,q=ha;
j<
i;
j++)q=q->
p->
next=q->
q->
next=hb->
next;
free(hb);
8.设二叉树T已按完全二叉树的形式存储在顺序表T中,试设计算法根据顺序表T建立该二叉树的二叉链表结构。
顺序表T定义如下:
structtree{
intno;
/*结点按完全二叉树的编号*/
ElEMTPdata;
/*数据域*/
}T[N];
/*N为二叉树T的结点数*/
BTNode*creat_tree(structtreeT[N])
{BTNode*p[MAX];
t=NULL;
for(i=0;
i<
N;
i++){
s=(BTNode*)malloc(sizeof(BTNode));
s->
data=T[i].data;
lchild=s->
rchild=NULL;
m=T[i].no;
p[m]=s;
if(m==1)t=s;
else{j=m/2;
if(m%2==0)p[j]->
lchild=s;
elsep[j]->
rchild=s;
}//slse
}//for
returnt;
}//creat_tree
9.编写算法判断带表头结点的单链表L是否是递增的。
若递增返回1,否则返回0。
intalgo1(LNode*L)
{
if(!
L->
next)return1;
p=L->
while(p->
next){
if(p->
data<
p->
next->
data)p=p->
elsereturn0;
return1;
10.假设一线性表由Fibonacci数列的前n(n≥3)项构成,试以带表头结点的单链表作该线性表的存储结构,设计算法建立该单链表,且将项数n存储在表头结点中。
Fibonacci数列根据下式求得:
1(n=1)
f(n)=1(n=2)
f(n-2)+f(n-1)(n≥3)
LNode*Creatlist(LNode*h,intn){
h=(LNode*)malloc(sizeof(Lnode));
h->
data=n;
next=p=(LNode*)malloc(sizeof(Lnode));
p->
next=q=(LNode*)malloc(sizeof(Lnode));
data=q->
data=1;
for(i=3;
=n;
q->
next=s=(LNode*)malloc(sizeof(Lnode));
s->
data=p->
data+q->
data;
s->
next=NULL;
p=q;
q=s;
}
returnh;
11.设二叉树T采用二叉链表结构存储,数据元素为字符类型。
设计算法将二叉链表中所有data域为小写字母的结点改为大写
字母。
voidalgo2(BTNode*bt){
if(bt->
data>
=’a’&
bt->
=’z’)
bt->
data-=32;
12.假设线性表以带表头结点的循环单链表表示。
voidInsertlist(LNode*h,intk,ElemTypey)
q=h;
while(p!
q=p;
s->
q-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 设计 复习题