数据结构算法设计题复习题Word格式.doc

上传人:b****1 文档编号:13169067 上传时间:2022-10-07 格式:DOC 页数:11 大小:49.50KB
下载 相关 举报
数据结构算法设计题复习题Word格式.doc_第1页
第1页 / 共11页
数据结构算法设计题复习题Word格式.doc_第2页
第2页 / 共11页
数据结构算法设计题复习题Word格式.doc_第3页
第3页 / 共11页
数据结构算法设计题复习题Word格式.doc_第4页
第4页 / 共11页
数据结构算法设计题复习题Word格式.doc_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构算法设计题复习题Word格式.doc

《数据结构算法设计题复习题Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构算法设计题复习题Word格式.doc(11页珍藏版)》请在冰豆网上搜索。

数据结构算法设计题复习题Word格式.doc

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-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1