数据结构算法分析报告题复习题.docx
《数据结构算法分析报告题复习题.docx》由会员分享,可在线阅读,更多相关《数据结构算法分析报告题复习题.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构算法分析报告题复习题
算法设计题
.设二叉树采用二叉链表结构存储。
试设计一个算法输出二叉树中所有非叶子结点,并求出非叶子结点的个数。
【答案】
;
(*){
(){
(>>){
(>);
;
}
(>);
(>);
}
}
.阅读下列函数()
([])
{和分别为数据区的下界和上界
;
;;
(<){
(<[]>);
(<[]>);
(<)
{[];[][];[];}
}
([]<);
-;
}
()写出该函数的功能;
()写一个调用上述函数实现下列功能的算法:
对一整型数组[]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个
数。
【答案】
()该函数的功能是:
调整整数数组[]中的元素并返回分界值,使所有<的元素均落在[]上,使所有≥的元素均落在[+]上。
()([])或([])
{{
;;
(-);(-);
(-);();
-;-;
}}
.假设线性表以带表头结点的循环单链表表示。
试设计一个算法,在线性表的第个元素前插入新元素。
假如表长小于,则插在表尾。
【答案】
(*){
;>;;
(<){
;>;;
}
(*)(());
>;
>;
>;
}
.二叉排序树的类型定义如下:
{∥二叉排序树的结点结构
;∥数据域
*,*;∥左、右孩子指针
},*;
设计递归算法,统计一棵二叉排序树中值小于的结点个数。
【答案】
()
{
;
*;
;
(><);
(>);
;
}
.设二叉树采用二叉链表结构存储,试设计算法求出二叉树中离根最近的第一个叶子结点。
(注:
结点按从上往下,自左
至右次序编号)
【答案】
*(*)
{();初始化队列
(){
();;
(()){
();
(>>);
(>)(>);
(>)(>);
}
}
}
.已知一棵具有个结点的完全二叉树被顺序存储在一维数组中,结点为字符类型,编写算法打印出编号为的结点的双亲和孩子结点。
【答案】
([]){
(<>);
()(“\”,[]);
(“’\”,[],[]);
(*<)(“’\”,[],[*]);
(“\”,[]));
(*<)(“’\”,[],[*]);
(“\”,[]));
;
}
.编写算法,将非空单链表插入到单链表的第(<≤表长)个结点前。
【答案】
(*,*){
(>;>);
(<;)>;
>>;
>>;
();
}
.设二叉树已按完全二叉树的形式存储在顺序表中,试设计算法根据顺序表建立该二叉树的二叉链表结构。
顺序表定义如下:
{
;*结点按完全二叉树的编号*
;*数据域*
}[];*为二叉树的结点数*
【答案】
*([])
{*[];
;
(<){
(*)(());
>[];
>>;
[];[];
();
{;
()[]>;
[]>;
}
}
;
}
.编写算法判断带表头结点的单链表是否是递增的。
若递增返回,否则返回。
【答案】
(*)
{
(>);
>;
(>){
(><>>)>;
;
}
;
}
.假设一线性表由数列的前(≥)项构成,试以带表头结点的单链表作该线性表的存储结构,设计算法建立该单链表,且将项数存储在表头结点中。
数列根据下式求得:
()
()()
()()(≥)
【答案】
*(*){
(*)(());
>;
>(*)(());
>(*)(());
>>;
(<){
>(*)(());
>>>;>;
;
}
;
}
.设二叉树采用二叉链表结构存储,数据元素为字符类型。
设计算法将二叉链表中所有域为小写字母的结点改为大写
字母。
【答案】
(*){
(){
(>>’’><’’)
>;
(>);
(>);
}
}
.假设线性表以带表头结点的循环单链表表示。
试设计一个算法,在线性表的第个元素前插入新元素。
假如表长小于,则插在表尾。
【答案】
(*)
{
;>;;
(<){
;>;;
}
(*)(());
>;
>;
>;
}
.有一带表头结点的单链表,其结点的元素值以非递减有序排列,编写一个算法在该链表中插入一个元素,使得插入后的单链表仍有序。
【答案】
(*,)
{
(*)(());
>;
;>;
(><)
{
;>;
}
>;>;
}
.二叉排序树的类型定义如下:
{∥二叉排序树的结点结构
;∥数据域
*,*;∥左、右孩子指针
},*;
设计递归算法,统计一棵二叉排序树中值小于的结点个数。
【答案】
()
{
;
*;
;
(><);
(>);
;
}
.有一带表头结点的单链表,其结点的域的类型为字符型,编写一个算法删除该链表中的数字字符。
【答案】
(*){
(>;){
>;
(>>’’><’’)
{>>;();}
;
}
}
.利用栈的基本运算,编写一个算法,实现将整数转换成二进制数输出。
【答案】
()
{
();
()
{;
;
();
}
(())
{();
(“”);
}
}
.设二叉树采用二叉链表结构存储,数据元素为型,试设计一个算法,若结点左孩子的域的值大于右孩子的域的值,则交换其左、右子树。
【答案】
(){
;
(){
((>>)(>>>>>)){
>;
>>;
>;
}
(>);
(>);
}
}
.设二叉树采用二叉链表结构存储,试设计算法求出二叉树的深度。
【答案】
(*){
();
(>);
(>);
(>);
}
.设给定的哈希表存储空间为(~),哈希函数的构造方法为“除留余数法”,处理冲突的方法为“线性探测法”,设计算法将元素填入到哈希表中。
【答案】
([]){
;
([])[];
{
{();
}([]);
[];
}
}
.对于给定的十进制正整数,打印出对应的八进制正整数。
(利用栈)
【答案】
()
{
();初始化栈
()
{;
;
();
}
(())判断栈是否为空
{();
(“”);
}
}
.一个正读和反读都相同的字符序列称为“回文”。
例如“”和“”是回文,而“”不是回文。
试写一个算法,要求利用栈的基本运算识别一个以为结束符的字符序列是否是回文。
【答案】
(*){
();
(;*’’;)
(,*);
(()){
();
(*);
}
;
}
.有一带表头结点的单链表,其结点的元素值以非递减有序排列,编写一个算法删除该链表中多余的元素值相同的结点(值相同的结点只保留一个)。
【答案】
(*){
(>){
(>>;){
>;
(>>){
>>;
();
}
;
}
}
.编写一个算法,判断带表头结点的单链表是否递增有序。
【答案】
(*)
{>;
(>)
{>;
(>>>);
;
}
;
}
.假设有两个带表头结点的单链表和,设计算法将单链表插入到单链表的第(<≤表长)个结点前。
【答案】
(*,*)
{(>;>);
(<;)
>;;
>>;
>>;
();
}
.假设以带头结点的单链表表示有序表,单链表的类型定义如下:
{
;
*
},*;
编写算法,从有序表中删除所有和有序表中元素相同的结点。
【答案】
(空)
.设二叉树采用二叉链表结构存储,数据元素为字符类型。
设计算法分别求出二叉链表中域为英文字母和数字字符的
结点个数。
【答案】
,;*全局变量*
(*){
(){
(>>’’><’’>>’’><’’);
(>>’’><’’);
(>);
(>);
}
}
.假设以单链表表示线性表,单链表的类型定义如下:
{
;
*;
},*;
编写算法,将一个头指针为且不带头结点的单链表改造为一个含头结点且头指针仍为的单向循环链表,并分析算法的时间复杂度。
【答案】
()
{
;
;
(>)>;
()(());
>;
>;
;
;
}
时间复杂度为()
.假设有向图以邻接表方式存储,编写一个算法判别顶点到顶点是否存在弧。
【答案】
(){
*判断有向图中顶点到顶点是否有弧,是则返回,否则返回*
[];
(){
(>)
;
>;
}
;
}
.设二叉树采用二叉链表结构存储,数据元素为字符类型。
设计算法求出二叉链表中域为大写字母的结点个数。
【答案】
;*为全局变量*
(*){
(){
(>>’’><’’)
;
(>);
(>);
}
}
.假设带表头结点的双向循环链表定义如下:
{
;
*,*;
};
现用该链表存放字符串,编写一个算法,判断该字符串是否中心对称关系。
例如字符串“”和“”都是中心对称的。
【答案】
(*)
{>>;
(>)
{
(>>)
{>>;}
;
}
;
}
.假设以带头结点的单链表表示线性表,单链表的类型定义如下:
;
{
;
*;
},*;
编写算法,删除线性表中最大元素(假设最大值唯一存在)。
函数原型为:
();
【答案】
()
{
;
;指向最大值的那个结点
;>;
;>;
()
{
(><>)
{;;}
;
>;
}
>;
>>;
();
}