数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx

上传人:b****6 文档编号:15685649 上传时间:2022-11-15 格式:DOCX 页数:19 大小:24.75KB
下载 相关 举报
数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx_第1页
第1页 / 共19页
数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx_第2页
第2页 / 共19页
数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx_第3页
第3页 / 共19页
数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx_第4页
第4页 / 共19页
数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx

《数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

数据结构本科期末综合练习算法设计题DOCWord文档下载推荐.docx

int>

&

A,int&

Max,int&

Min);

3.设有两个整数类型的顺序表A(有m个元素)和B(有n个元素),其元素均以升序排列。

试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C的元素也以升序排列(表中允许元素重复)。

函数的原型如下所示。

原型中的参数表给出参加运算的三个顺序表A、B与C。

从C中得到执行结果。

函数中用到顺序表的4个公有函数:

Length()求表的当前长度;

maxLength()求表的最大允许长度;

getData(intk)提取第k个元素的值;

setData(intk,intval)修改第k个元素的值为val。

template<

voidmerge(SeqList<

A,SeqList<

B,SeqList<

C);

4.编写一个函数frequency,统计在一个输入字符串中各个不同字符出现的频度。

函数返回两个数组:

A[]记录字符串中有多少种不同的字符,C[]记录每一种字符的出现次数。

此外,还要通过整数k返回不同字符数。

函数的原型如下所示:

#include<

iostream.h>

string.h>

voidfrequency(char*s,charA[],intC[],int&

k);

5.根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。

要求新生成的链表中不允许有重复元素,并要求返回新表的表头指针。

填写程序中缺少的部分。

ListNode*Merge(ListNode*L1,ListNode*L2){

//根据两个有序单链表L1和L2,生成一个新的有序单链表

ListNode*p1=L1->

link,*p2=L2->

link;

ListNode*first=newListNode;

ListNode*p=first;

while(p1!

=NULL&

p2!

=NULL){//当两个链表都未检测完时

}

=NULL){//继续处理p1链表中剩余的结点。

p=p->

link=newListNode;

p->

data=p1->

data;

p1=p1->

}

while(p2!

=NULL){//继续处理p2链表中剩余的结点。

data=p2->

p2=p2->

link=NULL;

returnfirst->

6.假定在一个带表头结点的单链表L中所有结点的值按递增顺序排列,试补充下面函数,功能是删除表L中所有其值大于等于min,同时小于等于max的结点。

voidrangeDelete(ListNode*L,ElemTypemin,ElemTypemax)

{

ListNode*q=L,*p=L->

7.已知一个带表头附加结点的单链表LA中包含有三类字符:

数字字符;

字母字符;

其他字符。

试编写一个while循环补充下面Separate函数,其功能是构造三个新的单链表,使LA,LB,LC单链表各自指向同一类字符。

要求使用原表的结点空间。

Separate函数将调用如下两个函数:

boolisdigit(charch);

//判断字符是否为数字,若是则返回“真”,否则返回“假”

boolisalpha(charch);

//判断字符是否为字母,若是则返回“真”,否则返回“假”

voidSeparate(ListNode*&

LA,ListNode*&

LB,ListNode*&

LC)

{//原来的单链表是LA,新的三个单链表是LA,LB,LC,它们均需要带表头附加结点

ListNode*pa=LA;

ListNode*pb=newListNode,*pc=newListNode;

LB=pb;

LC=pc;

ListNode*p=LA->

//p指向待处理的结点

//添加的while循环位置

pa->

pb->

pc->

//请把while循环内容写在此行下面

8.已知first为单链表的表头指针,结点结构为(data,link),试根据下列每个函数声明和算法功能写出递归算法。

intMax(LinkNode*f);

//递归算法:

求链表中的最大值,若链表为空则返回0

intNum(LinkNode*f);

求链表中结点个数

9.请分别写出在循环队列上进行插入和删除操作的算法。

循环队列定义如下:

structCyclicQueue{

ElemTypeelem[M];

//M为已定义过的整型常量,表示队列长度

intrear,front;

//rear指向队尾元素后一个位置,front指向队头元素

inttag;

//当front=rear且tag=0时,队列空,当front=rear且tag=1时,队列满

};

boolEnCQueue(CyclicQueue&

Q,ElemTypex)

{

//Q是一个循环队列,最多可存储M个元素,若队列不满,

//将x插入至队尾并返回true;

否则返回false。

boolDelCQueue(CyclicQueue&

Q,ElemType&

x)

//Q是一个循环队列,若队列不空,则删除队头元素并由x带回,

//且返回true,否则返回false

10.Q是一个由其尾指针和队列长度标识的循环队列,请写出插入和删除一个元素的算法。

structCyclicQueue//循环队列定义

//M为已定义过的整型常量

intrear;

//rear指向队尾元素的后一个位置

intlength;

//length指示队列中元素个数

//Q是一个循环队列,若队列不满,则将x插入并返回true;

否则返回false

//Q是一个循环队列,若队列不空,则删除队头元素并由x带回,

//且返回true;

11.计算多项式Pn(x)=a0xn+a1xn-1+a2xn-2+……+an-1x+an通常使用的方法是一种递推的方法。

它可以描述为如下的递推形式:

pn(x)=x*pn-1(x)+an(n>

0)

此处

Pn-1(x)=a0xn-1+a1xn-2+……+an-2x+an-1

P0=an

这也是问题的递归形式。

多项式的递归求解形式为:

poly(x,0)=A[0]

poly(x,n)=x*poly(x,n-1)+A[n],n>

0

试编写一个递归函数,计算这样的多项式的值。

floatpoly(floatx,floatA[],intn){

12.从n个自然数1,2,3,…,n中任取k个数的所有组合数用C(n,k)表示。

求C(n,k)的递归公式为

0(n<

=0,n<

k)

1(n>

0,k=0或k=n)

n(n>

0,k=1)

C(n-1,k)+C(n-1,k-1)(n>

1,0<

k<

n)

试写出计算C(n,k)的递归函数:

intcombine(intn,intk){

13.已知二叉树中的结点类型BinTreeNode定义为:

structBinTreeNode{chardata;

BinTreeNode*left,*right;

};

其中data为结点值域,left和right分别为指向左、右子女结点的指针域。

根据下面函数声明编写出求一棵二叉树高度的算法,该高度由函数返回。

假定树根的层次为0,参数BT初始指向这棵二叉树的根结点。

intBTreeHeight(BinTreeNode*BT);

14.已知二叉树中的结点类型BinTreeNode定义为:

其中data为结点值域,left和right分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中结点总数的算法,该总数值由函数返回。

假定参数BT初始指向这棵二叉树的根结点。

intBTreeCount(BinTreeNode*BT);

15.已知二叉树中的结点类型BinTreeNode定义为:

其中data为结点值域,left和right分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中叶子结点总数的算法,该总数值由函数返回。

intBTreeLeafCount(BinTreeNode*BT);

16.已知二叉树中的结点类型BinTreeNode定义为:

其中data为结点值域,left和right分别为指向左、右子女结点的指针域,根据下面函数声明编写出删除一棵二叉树中所有结点的算法,并使树根指针为空。

假定引用参数BT初始指向这棵二叉树的根结点。

voidClea

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

当前位置:首页 > 高中教育 > 语文

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

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