ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:53.32KB ,
资源ID:7868282      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7868282.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构算法设计题复习题0001.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构算法设计题复习题0001.docx

1、数据结构算法设计题复习题0001算法设计题1.设二叉树 bt 采用二叉链表结构存储。试设计一个算法输出二叉树中所有非叶子结点,并求出非叶子结点的 个数。【答案】int count=0;void algo2(BTNode *bt)if (bt)if(bt-lchild | bt-rchild) printf(bt-data);count+ ; algo2(bt-lchild); algo2(bt-rchild);2.阅读下列函数 arrange()int arrange(int a,int 1,int h,int x)111和h分别为数据区的下界和上界int i,j,t ;i=1;j=h;whi

2、le(ij) while(i=x)j- ;while(i=x)i+ ;if(ij) t=aj ; aj=ai ;ai=t ;if(ainext; j=1;while( p!=h & jnext; j+;s=(LNode *)malloc(sizeof(Lnode);s-data=y;q-next=s;s-next=q;4.二叉排序树的类型定义如下:typedef struct BSTNode /二叉排序树的结点结构int data; /数据域struct BSTNode *lchild, *rchild; /左、右孩子指针BSTNode,*BSTree;设计递归算法,统计一棵二叉排序树 T中值

3、小于a的结点个数。【答案】int f34(BSTree root)int count;BSTNode *p;p=root;if ( p & p-datalchild);retur n count;5.设二叉树T采用二叉链表结构存储,试设计算法求出二叉树中离根最近的第一个叶子结点。 (注:结点按从上往下,自左至右次序编号)【答案】BTNode * Firstleaf(BTNode *bt) InitQueue(Q); / 初始化队列 Qif(bt)En Queue(Q,bt);while(!EmptyQueue(Q)DeQueue(Q,p);if(!p-lchild & !p-rchild) r

4、eturn p; if(p-lchild) EnQueue(Q,p-lchild); if(p-rchild) En Queue(Q,p-rchild);6.已知一棵具有n个结点的完全二叉树被顺序存储在一维数组中, 结点为字符类型,编写算法打印出编号为k的结点的双亲和孩子结点。【答案】int algo2(char bt,int n,int k)if (kn) return 0;if( k=1) printf(“ %c is a rootn” , bt1);else printf( “ cs parent is %cn” , btk, btk/2);if(2*k=n) printf(“ c s

5、lchild is %cn” , btk, bt2*k);else printf( “ %c isnot lchildn” , btk);if(2*k+1=n) printf(“ c s rchild is %cn” , btk, bt2*k+1);else printf( “ %c isnot rchildn” , btk);return 1;7.编写算法,将非空单链表 hb插入到单链表ha的第i(0n ext; p=p-n ext);for(j=1,q=ha;jn ext;p_n ext=q _n ext;q-n ext=hb-next ;设二叉树T已按完全二叉树的形式存储在顺序表 T中,

6、顺序表T定义如下:struct tree BTNode *pMAX;t=NULL;for(i=0;idata=Ti.data; s-lchild=s-rchild=NULL;m=Ti. no; pm=s;if(m=1) t=s;else j=m/2;if(m%2=0) pj-lchild=s;else pj-rchild=s;/slse/forreturn t;/ creat_tree9.编写算法判断带表头结点的单链表 L是否是递增的。若递增返回 1否则返回0。【答案】int algo1 (LNode *L )if(!L-n ext) return 1;p=L-n ext;while(p- n

7、ext)if(p-data n ext-data) p=p-n ext;else return 0;return 1;10.假设一线性表由Fibonacci数列的前n (n3)项构成,试以带表头结点的单链表作该线性表的存储结构,设计算法建立该单链表,且将项数 n存储在表头结点中。Fib onacci数列根据下式求得:1 (n=1)f(n)= 1 (n=2)f(n-2)+f(n-1) (n 3)【答案】LNode * Creatlist(LNode *h,int n) h=(LNode *)malloc(sizeof(Lnode);h-data=n;h-next=p=(LNode *)mallo

8、c(sizeof(Lnode);p-next=q=(LNode *)malloc(sizeof(Lnode);p-data= q-data=1;for(i=3;inext=s=(LNode *)malloc(sizeof(Lnode);s-data=p-data+q-data; s-next=NULL;p=q;q=s;return h;11.设二叉树T采用二叉链表结构存储,数据元素为字符类型。设计算法将二叉链表中所有 data域为小写字母的结点改为大写字母。【答案】void algo2(BTNode *bt)if (bt)if(bt- data= a & bt - datadata-=32;a

9、lgo2(bt-lchild);algo2(bt-rchild);12.假设线性表以带表头结点的循环单链表表示。试设计一个算法,在线性表的第 k个元素前插入新元素y。假如表长小于k,则插在表尾。【答案】void lnsertlist(LNode *h,int k,ElemType y)q=h; P=h-next; j=1;while( p!=h & jnext; j+;s=(LNode *)malloc(sizeof(Lnode);s-data=y;q_next=s;s_next=q;13.有一带表头结点的单链表,其结点的元素值以非递减有序排列,编写一个算法在该链表中插入一个元素 x,使得插入

10、后的单链表仍有序。【答案】void algo1 (LNode *H, ElemTp x)s=(LNode *) malloc ( sizeof (LNode);s-data=x;q=H; p=H-next;while ( p & p-datanext;s-next=p; q-next=s;14.二叉排序树的类型定义如下:typedef struct BSTNode /二叉排序树的结点结构int data; /数据域struct BSTNode *lchild, *rchild; /左、右孩子指针BSTNode,*BSTree;设计递归算法,统计一棵二叉排序树 T中值小于a的结点个数。【答案】i

11、nt f34(BSTree root)int count;BSTNode *p;p=root;if ( p & p-datalchild);retur n count;15.有一带表头结点的单链表,其结点的 data域的类型为字符型,编写一个算法删除该链表中的数字字符。【答案】void Del_digit (LNode *h) for(p=h;p_next;)q=p_next;if(q- data= O & q - data next=q-next; free(q); else p=q;16.利用栈的基本运算,编写一个算法,实现将整数转换成二进制数输出。【答案】void returnDtoO(

12、int num)initStack(s);while(n) k=n%2;n=n/2;push(s,k);while(EmptyStack(s) pop(s,k);printf ( “d ,k);17.设二叉树T采用二叉链表结构存储,数据元素为 int型,试设计一个算法,若结点左孩子的 data域的值大于右孩子的data域的值,则交换其左、右子树。【答案】void algo2(bitreptr bt)bitreptr x;if (bt)if (bt-lchild & bt-rchild) & (bt-lchild -data bt-rchild-data) ) x= bt-lchild ;bt-

13、lchild= bt-rchild;bt-rchild=x;algo2(bt-lchild);algo2(bt-rchild);18.设二叉树T采用二叉链表结构存储,试设计算法求出二叉树的深度。【答案】int Deep(BTNode *bt)if (bt=NULL) return 0;left=Deep(bt-lchild);right=Deep(bt-rchild);return (leftright?left:right)+1;19.设给定的哈希表存储空间为 H ( 0M-1 ),哈希函数的构造方法为 除留余数法”,处理冲突的方法为 线性探测法”,设计算法将元素e填入到哈希表中。【答案】v

14、oid hash-i nsert(hashTable h,i nt m,ElemType e)j=e%p;if(hj!=NULL) hj=e;elsedo j=(j+1) %m;while(hj!=NULL );hj=e;20.对于给定的十进制正整数,打印出对应的八进制正整数。 (利用栈)【答案】void DecToOct(int num)initStack(s); / 初始化栈while(n) k=n%8;n=n/8;push(s,k);while(EmptyStack(s) / 判断栈是否为空 pop(s,k);printf( “d ,k);21.一个正读和反读都相同的字符序列称为 回文”

15、。例如“Jbcba”和1221”是回文,而abcde”不是回文。试写一个算法,要求利用栈的基本运算识别一个以 为结束符的字符序列是否是回文。【答案】int Pair(char *str ) InitStack(s);p=strfor ( ; *p!= ; p+ )Push(s,*p);while(StackEmpty(s) Pop(s,y);if(y!=*str+ ) return 0;return 1;22.有一带表头结点的单链表,其结点的元素值以非递减有序排列,编写一个算法删除该链表中多余的元素值 相同的结点(值相同的结点只保留一个)。【答案】void Delsame (LNode *h)

16、 if(h-next) for(p=h-next;p-next;)q=p_next;if(p_data=q_data)p-next=q-next;free(q);else p=q;23.编写一个算法,判断带表头结点的 单链表是否递增有序。【答案】int fun(LNode *h ) p=h-n ext;while(p- next) q=p-next ;if(q-datap-data) retur n 0;p=q;return 1;24.假设有两个带表头结点的单链表 HA和HB设计算法将单链表 HBf入到单链表HA勺第i(0n ext; p=p-n ext);for(j=1,q=ha;jn ex

17、t;p_n ext=q _n ext;q-n ext= hb-n ext ;free(hb);25.假设以带头结点的单链表表示有序表,单链表的类型定义如下:typedef struct no deDataType data;struct node *nextLi nkNode, *Li nkList;编写算法,从有序表 A中删除所有和有序表 B中元素相同的结点。【答案】(空)26.设二叉树T采用二叉链表结构存储,数据元素为字符类型。设计算法分别求出二叉链表中 和数字字符的结点个数。【答案】int letter=0,digit=0 ; /* 全局变量 */void algo2(BTNode *b

18、t)if (bt)if(bt- data= A &itataddta= a &Sbltatadata= 0 &batalchild);algo2(bt-rchild);27.假设以单链表表示线性表,单链表的类型定义如下:typedef struct node DataType data; struct node *n ext; Lin kNode, *Li nkList;编写算法,将一个头指针为head且不带头结点的单链表改造为一个含头结点且头指针仍为 表,并分析算法的时间复杂度。【答案】LinkList f34(LinkList head)Lin kList p,s;p=head;while

19、 (p-n ext) p=p-n ext;s=(L in kList)malloc(sizeof(L in kNode);data域为英文字母head的单向循环链s-n ext=head;p_n ext=s;head=s;retur n head;时间复杂度为:0(n)28.假设有向图以邻接表方式存储,编写一个算法判别顶点 Vi到顶点vj是否存在弧。【答案】int lsArcs(ALgraph G ,int i,int j) /*判断有向图G中顶点i到顶点j是否有弧,是则返回1,否则返回0*/p=Gi.firstarc;while (p!=NULL) if(p-adjvex =j)return

20、 1;p=p-n extarc;return 0;29.设二叉树T采用二叉链表结构存储,数据元素为字符类型。设计算法求出二叉链表中 结点个数。【答案】int count=0 ; /* count 为全局变量 */void algo2(BTNode *bt)if (bt)if(bt- data= A & bt - datalchild);algo2(bt-rchild);30.假设带表头结点的双向循环链表定义如下:typedef struct duno dechar data;struct dunode *prior, * next;DuNode;现用该链表存放字符串,编写一个算法,判断该字符串

21、是否中心对称关系。例如字符串 都是中心对称的。【答案】int fun(DuNode *h ) p=h-n ext;q=h-prior;while(p!=q & p-prior!=q)if(q-data=p-data) p=p-n ext;q=q-prior;data域为大写字母的“ 壬 ft “xyzzyx 和 xyzyxelse return 0;return 1;31.假设以带头结点的单链表表示线性表,单链表的类型定义如下:typedef int DataType;typedef struct node DataType data;struct node * n ext; Lin kNode, * Lin kList;编写算法,删除线性表中最大元素 (假设最大值唯一存在)。函数原型为:void f34(Li nkList head);【答案】void f34(L in kList head)int e;Lin kList p,q,s,spre; /s 指向最大值的那个结点spre=head; s=head-n ext;q=s; p=s-n ext;while (p)if(s-datadata) s=p; spre=q; q=p;p=p-n ext;e=s-data;spre-n ext=s-n ext;free(s);

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

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