给出n个数字,问出现次数最多的数有多少不重叠的非空空间

扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
一个数字有n位,其中有m个不同的数字.问,当这个n位数中的数字随便排列时,可以组成多少个不同的数?一个数字有n位,其中有m个不同的数字.请问,当这个n位数中的数字随便排列的时候,可以组成多少个不同的数?比如114这个三位数,有两个不同的数字,就有114、141、411三种;123这个三位数,有3个不同的数字,就有123、132、213、231、312、321六种.
扫二维码下载作业帮
2亿+学生的选择
因为有m个不同的数字,其他的都是相同的数字,那么就是在n个位置上选出m个位置的排列,其他的空位都是相同的数字.
为您推荐:
其他类似问题
设m个不同的数字的个数为a1,a2...am则a1+a2+..+am=n组成的数为n!/[a1!*a2!*...*am!]只能算到这里,后面的就不会算了
扫描下载二维码给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。
给定N段绳子的长度,你需要找出它们能串成的绳子的最大长度。
输入格式:每个输入包含1个测试用例。每个测试用例第1行给出正整数N (2 &= N &= 104);第2行给出N个正整数,...
小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。输入格式:输入第一行给出三个正整数M(&= 1000)、N和S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从1开始)。随后M行,顺序给出转发微博的网友的昵称(不超过20个字符、不包含空格回车的非空字符串)。注意:可能有人转发多次,但不能中奖多次。...
PAT-B 1056. 组合数的和给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。输入格式:输入在一行中先给出N(1&N&10),随后是N个不同的非0个位数字。数字间以空格分隔。输出格式:输出所有可能组合出来的2位数字的和。输入样例:3 2 8 5输出样例...
PAT-B 1057. 数零壹给定一串长度不超过10510^5的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串“PAT (Basic)”,其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0、4个1。输入格式:输入在一行中给出长度不...
PAT-B 1058. 选择题批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。输入格式:输入在第一行给出两个正整数N(&=1000)和M(&=100),分别是学生人数和多选题的个数。随后M行,每行顺次给出一道题的满分值(不超过5的正整数)、选项个数(不少于2且不超过5的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文...
PAT-B 1059. C语言竞赛C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:
冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
其他人将得到巧克力。
给定比赛的最终排名以及一系列参赛者的ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数N(&=1...
PAT-B 1061. 判断题判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。输入格式:输入在第一行给出两个不超过100的正整数N和M,分别是学生人数和判断题数量。第二行给出M个不超过5的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0代表“非”,1代表“是”。随后N行,每行给出一个学生的解答。数字间均以空格分隔。输出格式:按照输入的顺序输出每个学生的...
PAT-B 1063. 计算谱半径在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的n个复数空间的特征值{a1+b1i, …, an+bni},它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。现在给定一些复数空间的特征值,请你计算并输出这些特征值的谱半径。输入格式:输入第一行给出正整数N(&= 10000)是输入的特征值的个数。随后N行,每行给出1个特征值的实部和...
PAT-B 1064. 朋友数如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。注意:我们默认一个整数自己是自己的朋友。输入格式:输入第一行给出正整数N。随后一行给出N个正整数,数字间以空格分隔。题目保证所有数字...
PAT-B 1065. 单身狗“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。输入格式:输入第一行给出一个正整数N(&=50000),是已知夫妻/伴侣的对数;随后N行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个ID号,为5位数字(从0),ID间以空格分隔;之后给出一个正整数M(&=10000),为参加派对的总人数;随后...
1055. 集体照拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下:
每排人数为N/K(向下取整),多出来的人全部站在最后一排;
后排所有人的个子都不比前排任何人矮;
每排中最高者站中间(中间位置为m/2+1,其中m为该排人数,除法向下取整);
每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为17...
1048. 数字加密本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。输入格式:输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。输出格式:在...
1007. 素数对猜想让我们定义 dnd_n 为:dn=pn+1-pnd_n = p_{n+1} - p_n,其中 pi 是第i个素数。显然有 d1=1 且对于n&1有 dnd_n 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(&105)N (& 10^5),请计算不超过N的满足猜想的素数对的个数。输入格式:每个测试输入包含1个测试用例,给出正整数N。输出格式:每...
萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:[左手]([左眼][口][右眼])[右手]现给出可选用的符号集合,请你按用户的要求输出表情。输入格式:输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号[]内。题目保证每个集合都至少有一个.。之后一行给出一个正整数K,为用户请求的个数。随后K行,每行给出一个用户的符号...
本题要求编写程序,计算2个有理数的和、差、积、商。输入格式:输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。输出格式:分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最...
访问:98221次
积分:3811
积分:3811
排名:第8618名
原创:278篇
译文:15篇
评论:23条
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
含有n个元素的非空有限集的子集个数如何计算?如题.
扫二维码下载作业帮
2亿+学生的选择
总数为n 分别是n取1 n取2 .n取n的组合的和
为您推荐:
其他类似问题
扫描下载二维码【图片】数据结构【尘佩吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:53贴子:
算法设计题(2x10分=20分)(要写注释)1. 要求在顺序有序表当中设计二分查找的算法into Search_Bin ( SSTable ST, KeyType key ) {
high = ST.
// 置区间初值
while (low &= high) {
mid = (low + high) / 2;
if (EQ (key , ST.elem[mid].key) )
// 找到待查元素
if ( LT (key , ST.elem[mid].key) )
high = mid - 1;
// 继续在前半区间进行查找
low = mid + 1; // 继续在后半区间进行查找
// 顺序表中不存在待查元素} // Search_Bin2. 在链式存储结构上设计直接插入排序算法利用 “顺序查找”实现“在R[1..i-1]中查找R[i]的插入位置”算法的实现要点:从R[i-1]起向前进行顺序查找,监视哨设置在R[0]; (动画演示参考老师PPT的第九章排序的第23页)对于在查找过程中找到的那些关键字不小于R[i].key的记录,并在查找的同时实现记录向后移动;for (j=i-1; R[0].key&R[j]. --j);
R[j+1] = R[j] (动画演示参考老师PPT的第九章排序的第24页)令 i = 2,3,…, n, 实现整个序列的排序。for ( i=2;
if (R[i].key&R[i-1].key)
在 R[1..i-1]中查找R[i]的插入位置;
插入R[i] ;
} void InsertionSort ( SqList &L )
// 对顺序表 L 作直接插入排序。{
for ( i=2; i&=L. ++i )
if (L.r[i].key & L.r[i-1].key) {L.r[0]= L.r[i];
// 复制为监视哨for ( j=i-1; L.r[0].key & L.r[j].
L.r[j+1] = L.r[j];
// 记录后移L.r[j+1] = L.r[0];
// 插入到正确位置
}} // InsertSort3. 设计判断二叉树是否为二叉排序树的算法#include &stdio.h&
typedef int DataT
typedef struct node{
struct node *lchild,*
typedef BinTNode *BinT
void CreateBinTree(BinTree *T)
scanf(&%d&,&ss);
if(ss==0) *T=NULL;
*T=(BinTNode*)malloc(sizeof(BinTNode));
(*T)-&data=
CreateBinTree(&(*T)-&lchild);
CreateBinTree(&(*T)-&rchild);
int PXS(BinTree T)
if(T!= NULL)
if(T-&lchild!=NULL && T-&rchild==NULL)
if(T-&lchild-&data&T-&data)
count=-1;}
}4. 设计求结点在二叉排序树中的层次的算法 Status SearchBST (BiTree T, KeyType key, BiTree f, BiTree &p ) {
return FALSE; }
// 查找不成功else
if ( EQ(key, T-&data.key) )
return TRUE; }
// 查找成功else
if ( LT(key, T-&data.key) )
SearchBST(T-&lchild, key, T, p)else
SearchBST(T-&rchild, key, T, p)} // SearchBST应用题(5x6分=30分)(要写过程)1. 知道某棵二叉树的中序遍历序列、前序遍历序列,写出后序序列(要把如何解答的内容写出来)先(根)序的遍历算法:若二叉树为空树,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。中(根)序的遍历算法:若二叉树为空树,则空操作;否则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。后(根)序的遍历算法:若二叉树为空树,则空操作;否则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。 2. 有一个无向图,要求给出最小生成树的边的集合和权值和 3. 给出一组初始记录的关键字序列,顺序查找,求成功查找时的平均查找长度分析顺序查找的时间性能定义: 查找算法的平均查找长度
(Average Search Length)
为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值其中: n 为表长,Pi 为查找表中第i个记录的概率,且
, Ci为找到该记录时,曾和给定值比较过的关键字的个数。对顺序表而言,Ci = n-i+1
ASL = nP1 +(n-1)P2 + +2Pn-1+Pn在等概率查找的情况下,顺序表查找的平均查找长度为:
在不等概率查找的情况下,ASLss 在Pn≥Pn-1≥···≥P2≥P1时取极小值若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上。4. 知道一个哈希表的长度、函数,初始记录关键字的序列,要求用两个方法(线性探测法、链地址方法)作为解决冲突的平均查找长度(看书、看老师PPT)1. 开放定址法
线性探测法:
是指从发生冲突的地址(设为d)开始,依次探查d的下一个地址(当到达地址为m-1的哈希表表尾时,下一个探查的地址是表首地址0),直到找到一个空闲单元为止(当m&=n时一定能找到一个空闲单元)。线性探测法的数学地推公式为: 优点:只要哈希表未被填满,保证能找到一个空地址单元存 放有冲突的元素;缺点:容易产生“堆积” ,大大降低了查找效率。举例:已知一组关键字为(19,14,23,1,68,20,84,27,55,11,10,79)哈希函数为H(key)=key MOD 13 ,冲突解决方法为线性探测画出哈希表的结构和计算平均查找长度线性探测:H(19)=6
H(68)=3H(20)=7
H(11)=11H(10)=10
ASL=(1+1+1+2+1+1+3+3+3+1+3+8)/12=2.332. 链地址法基本思想:如果没有发生哈希冲突,则直接存放该数据元素;如果发生了哈希冲突,则把发生哈希冲突的数据元素另外存放在单链表中。方法有两种:第一种方法是为发生哈希冲突的不同的同义词建立不同的单链表;第二种方法是为发生哈希冲突的所有同义词建立一个单链表。已知一组关键字为(19,14,23,1,68,20,84,27,55,11,10,79)哈希函数为H(key)=key MOD 13 ,冲突解决方法为链表法画出哈希表的结构和计算平均查找长度将所有哈希地址相同的记录都链接在同一链表中。
5. 给出一个权值集合w,构造一棵哈夫曼树,并计算哈夫曼带权路径长度(赫夫曼算法)
以二叉树为例:1.根据给定的 n 个权值 {w1, w2, …, wn},构造 n 棵二叉树的集合F = {T1,
… , Tn},
其中每棵二叉树中均只含一个带权值 为 wi 的根结点,其左、右子树为空树;2.在 F 中选取其根结点的权值为最小的两棵二叉树,分别作为左、
右子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和;3. 从F中删去这两棵树,同时加入刚生成的新树;4.
重复 2 和 3 两步,直至 F 中只含一棵树为止。
6. 完全二叉树的顺序存储结构,要求给出链式存储结构和前序、中序、后序遍历序列一、 二叉树的顺序存储表示从上至下,从左到右 二、 二叉树的链式存储表示二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉树最常用的的链式存储结构是二叉链。二叉链存储结构的每个结点包含三个域,分别是数据域data、左孩子指针域leftChild和右孩子指针域rightChild。 结点结构:
二叉链存储结构的二叉树也有不带头结点和带头结点两种
7. 设一组初始记录的关键字序列,要求以第一个元素为基准求得一趟快速排序的结果和第二趟直接选择排序后结果一趟快速排序(一次划分)目标:找一个记录,以它的关键字作为“枢轴”,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。致使一趟排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且
R[j].key≤ R[i].key ≤ R[j].key
(s≤j≤i-1)
(i+1≤j≤t)。 动画演示参考老师PPT的第九章排序的第52页设 R[s]=52 为枢轴将 R[high].key 和 枢轴的关键字进行比较,要求R[high].key ≥ 枢轴的关键字将 R[low].key 和 枢轴的关键字进行比较,要求R[low].key ≤ 枢轴的关键字可见,经过“一次划分” ,将关键字序列
52, 49, 80, 36, 14,
58, 61, 97, 23, 75
23, 49, 14, 36, (52) 58, 61, 97, 80, 75在调整过程中,设立了两个指针: low 和high,它们的初值分别为: s 和 t,
之后逐渐减小 high,增加 low,并保证
R[high].key≥52,和
R[low].key≤52,否则进行记录的“交换”。int Partition (RedType& R[], int low, int high) {
pivotkey = R[low].
while (low&high) {
while (low&high && R[high].key&=pivotkey)
R[low]←→R[high];
while (low&high && R[low].key&=pivotkey)
R[low]←→R[high];
// 返回枢轴所在位置} // Partition
int Partition (RedType& R[], int low, int high) {R[0] = R[low];
pivotkey = R[low].
while (low&high) {while(low&high&& R[high].key&=pivotkey)
// 从右向左搜索R[low] = R[high];while (low&high && R[low].key&=pivotkey)
// 从左向右搜索R[high] = R[low];}R[low] = R[0];}// Partition
1.直接选择排序基本思想是:从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第一个数据元素交换位置;然后从不包括第一个位置上数据元素的集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第二个数据元素交换位置;如此重复,直到数据元素集合中只剩一个数据元素为止。优点:实现简单缺点:每趟只能确定一个元素,表长为n时需要n-1趟 算法分析时间效率: O(n2)——虽移动次数较少,但比较次数仍多。 空间效率:O(1)——没有附加单元(仅用到1个temp)算法的稳定性:不稳定void SelectSort(DataType a[], int n){int i, j,DataTfor(i = 0; i & n-1; i++){small = //设第i个数据元素关键字最小for(j = i+1; j & j++)//寻找关键字最小的数据元素
if(a[j].key & a[small].key) small=j;
//记住最小元素的下标if(small != i)//当最小元素的下标不为i时交换位置{temp = a[i];a[i] = a[small];a[small] =}}}8. 设一组初始记录的关键字集合,哈希表的长度已知,给出哈希函数对于动态查找表而言,1) 表长不确定;2) 在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。因此在一般情况下,需在关键字与记录在表中的存储位置之间建立一个函数关系,以 f(key) 作为关键字为 key 的记录在表中的位置,通常称这个函数 f(key) 为哈希函数。例如:对于如下 9 个关键字{Zhao, Qian, Sun, Li, Wu, Chen, Han, Ye, Dei}设 哈希函数 f(key) =
ë(Ord(第一个字母) -Ord('A')+1)/2û 从这个例子可见:1)
哈希函数是一个映象,即: 将关键字的集合映射到某个地址集合上,
它的设置很灵活,只要这个地址集合的
大小不超出允许范围即可;2)
由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即: key1¹ key2,而
f(key1) = f(key2)。3)
很难找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。哈希函数的构造方法函数设计目标:使通过哈希函数得到的n个数据元素的哈希地址尽可能均匀地分布在m个连续内存单元上,同时使计算过程尽可能简单,以达到尽可能高的时间效率。一、除留余数法h(K) = K mod m 优点:计算简单,适用范围广 关键:选好哈希表长度m 技巧:哈希表长m取素数时效果较好二、直接定址法h(K) =K
或h(K) =a* K + b 优点:计算简单,不会发生冲突 缺点:有可能造成内存单元的大量浪费 三、数字分析法特点:取数据元素关键字中某些取值较均匀的数字位作为哈希地址,只适合于所有关键字值已知的情况9. 有一个无向图,给出深度优先、广度优先编译,最小生成树一、 深度优先搜索遍历图连通图的深度优先搜索遍历从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。 从上页的图解可见:1. 从深度优先搜索遍历连通图的过程类似于树的先根遍历;2. 如何判别V的邻接点是否被访问?比较排序的优缺点
解决的办法是:为每个顶点设立一个 “访问标志 visited[w]”。 void DFS(Graph G, int v) {
// 从顶点v出发,深度优先搜索遍历连通图 G
visited[v] = TRUE;
VisitFunc(v);
for(w=FirstAdjVex(G, v);w!=0; w=NextAdjVex(G,v,w))
if (!visited[w])
DFS(G, w);
// 对v的尚未访问的邻接顶点w
// 递归调用DFS} // DFS 非连通图的深度优先搜索遍历首先将图中每个顶点的访问标志设为 FALSE,
之后搜索图中每个顶点,如果未被访问,则以该顶点为起始点,进行深度优先搜索遍历,否则继续检查下一顶点。 void DFSTraverse(Graph G, Status (*Visit)(int v))
// 对图 G 作深度优先遍历。{
VisitFunc = V
for (v=0; v&G. ++v)
visited[v] = FALSE; // 访问标志数组初始化
for (v=0; v&G. ++v)
if (!visited[v])
DFS(G, v);
// 对尚未访问的顶点调用DFS}
动画演示参考老师PPT第7章第52页 二、广度优先搜索遍历图对连通图,从起始点V到其余各顶点必定存在路径。
从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。void BFSTraverse(Graph G,Status (*Visit)(int v)){
for (v=0; v&G. ++v)
visited[v] = FALSE;
//初始化访问标志
InitQueue(Q);
// 置空的辅助队列Q
for ( v=0;
if ( !visited[v])
// v 尚未访问
visited[u] = TRUE;
// 访问uEnQueue(Q, v);
// v入队列while (!QueueEmpty(Q))
DeQueue(Q, u);
// 队头元素出队并置为u
for(w=FirstAdjVex(G, u); w!=0;w=NextAdjVex(G,u,w))
if ( ! visited[w])
visited[w]=TRUE;
EnQueue(Q, w); // 访问的顶点w入队列
} // if} // while
} // BFSTraverse举例: 结论:1. 从顶点 i 到顶点 s ,若存在路径,则从顶点 i 出发进行深度优先搜索,必能搜索到顶点 s 。2. 遍历过程中搜索到的顶点不一定是路径上的顶点。3. 由它出发进行的深度优先遍历已经完成的顶点不是路径上的顶点。void DFSearch( int v, int s, char *PATH)
{ // 从第v个顶点出发递归地深度优先遍历图G, // 求得一条从v到s的简单路径,并记录在PATH中
visited[v] = TRUE;
// 访问第 v 个顶点
Append(PATH, getVertex(v));
// 第v个顶点加入路径
for (w=FirstAdjVex(v);
w!=0&&!w=NextAdjVex(v) )
if (w=s) { found = TRUE;
Append(PATH, w); }
if (!visited[w])
DFSearch(w, s, PATH);
if (!found)
Delete (PATH); // 从路径上删除顶点 v }2. 求两个顶点之间的一条路径长度最短的路径
1) 将链队列的结点改为“双链”结点。即结点中包含next 和priou两个指针;2) 修改入队列的操作。插入新的队尾结点时,令其priou域的指针指向刚刚出队列的结点,即当前的队头指针所指结点;3) 修改出队列的操作。出队列时,仅移动队头指针,而不将队头结点从链表中删除。typedef
DuLinkList QueueP void InitQueue(LinkQueue& Q) {
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.front-&next = Q.rear-&next = NULL}void EnQueue( LinkQueue& Q, QelemType e ) {
p = (QueuePtr) malloc (sizeof(QNode));
p-&next = NULL;
p-&priou = Q.front
Q.rear-&next =
Q.rear =}void DeQueue( LinkQueue& Q, QelemType& e ) {
Q.front = Q.front-&
e = Q.front-&data}填空题(5x4分=20分)1. 有一个双向链表,插入结点的操作或者代码程序“插入” 和“删除”时需要同时修改两个方向上的指针。s-&next = p-&
p-&next =s-&next-&prior =
s-&prior = 动画演示参考老师PPT第二章第105页2. 有向完全图,假设有n个顶点那么有多少条有向边
无向完全图有多少条无向边假设图中有 n 个顶点,e 条边,则含有 e=n(n-1)/2 条边的无向图称作完全图;含有 e=n(n-1) 条弧的有向图称作 有向完全图;若边或弧的个数 e&nlogn,则称作稀疏图,否则称作稠密图。3. 有一个关键字序列,筛选,建堆所进行的筛选操作所谓“筛选”指的是,对一棵左/右子树均为堆的完全二叉树,“调整”根结点使整个二叉树也成为一个堆。堆是满足下列性质的数列{r1, r2, …,rn}: (小顶堆)
(大顶堆)void HeapAdjust (RcdType &R[], int s, int m){
// 已知 R[s..m]中记录的关键字除 R[s] 之外均
// 满足堆的特征,本函数自上而下调整 R[s] 的
// 关键字,使 R[s..m] 也成为一个大顶堆rc = R[s];
// 暂存 R[s] for ( j=2*s; j&=m; j*=2 ) { // j 初值指向左孩子自上而下的筛选过程;if ( j&m && R[j].key&R[j+1].key )
// 左/右“子树根”之间先进行相互比较
// 令 j 指示关键字较大记录的位置if ( rc.key &= R[j].key )
// 再作“根”和“子树根”之间的比较,
// 若“&=”成立,则说明已找到 rc 的插
// 入位置 s ,不需要继续往下调整R[s] = R[j];
// 否则记录上移,尚需继续往下调整}R[s] =
// 将调整前的堆顶记录插入到 s 位置} // HeapAdjust例如: 堆排序的时间复杂度分析:1. 对深度为 k 的堆,“筛选”所需进行的关键字比较的次数至多为2(k-1);2. 对 n 个关键字,建成深度为h(=log2n+1)的堆,所需进行的关键字比较的次数至多 4n;3. 调整“堆顶” n-1 次,总共进行的关键
字比较的次数不超过 2 (log2(n-1)+ log2(n-2)+ …+log22) & 2n(log2n)因此,堆排序的时间复杂度为O(nlogn)。4. 哈希表冲突,解决冲突的两种方法是哪两种方法开放定址法 、链地址法5. 三叉树,有m个度为0的结点,有n个度为2 的结点,求有多少个度为3的结点结点的度: 分支的个数6. 单链表插入结点的操作在单链表中第 i 个结点之前进行插入的基本操作为:找到线性表中第i-1个结点,然后修改其指向后继的指针。Status ListInsert_L(LinkList L, int i, ElemType e) {
// L 为带头结点的单链表的头指针,本算法
// 在链表中第i 个结点之前插入新的元素 e
j = 0;while (p && j & i-1)
// 寻找第 i-1 个结点if (!p || j & i-1)
return ERROR;
// i 大于表长或者小于1s = (LinkList) malloc ( sizeof (LNode));
// 生成新结点s-&data = s-&next = p-&
p-&next = // 插入return OK;
} // LinstInsert_L算法的时间复杂度为: O(ListLength(L)) 动画演示参考老师PPT第二章第73页7. 双向链表指针的操作双向链表typedef struct
struct DuLNode
// 指向前驱的指针域
struct DuLNode
// 指向后继的指针域} DuLNode, *DuLinkL8. 知道二叉树的中序、后序遍历序列,求前序遍历序列参考应用题第一题9. 完全二叉树上在某一层上最少有多少个结点,最多有多少个结点在二叉树的第 i 层上至多有2^i-1 个结点。
(i≥1)两类特殊的二叉树:满二叉树:指的是深度为k且含有2k-1个结点的二叉树。完全二叉树:树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应10. 有向图的矩阵存储方式typedef struct ArcCell{ // 弧的定义
// VRType是顶点关系类型。
// 对无权图,用1或0表示相邻否;
// 对带权图,则为权值类型。
// 该弧相关信息的指针} ArcCell,
AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct { // 图的定义
VertexType
// 顶点信息
vexs[MAX_VERTEX_NUM];
// 弧的信息
// 顶点数,弧数
// 图的种类标志
} MG 选择题(10x2分=20分)1. 掌握二叉树的线性结构,物理结构和逻辑结构二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。二叉树的五种基本形态:空树、只含根结点、右子树为空树、左子树为空树、左右子树均不为空树逻辑结构:
一对二(1:2)基本特征:① 每个结点最多只有两棵子树(不存在度大于2的结点);② 左子树和右子树次序不能颠倒。2. 求一个程序的时间复杂度看具体程序3. 删除单链表中的结点操作程序在单链表中删除第 i 个结点的基本操作为:找到线性表中第i-1个结点,修改其指向后继的指针。q = p-&
p-&next = q-&
free(q); 动画演示参考老师PPT的第二章第76页Status ListDelete_L(LinkList L, int i, ElemType &e) {
// 删除以 L 为头指针(带头结点)的单链表中第 i 个结点p = L;
j = 0;while (p-&next && j & i-1) {
// 寻找第 i 个结点,并令 p 指向其前趋if
(!(p-&next) || j & i-1)
return ERROR;
// 删除位置不合理q = p-&
p-&next = q-&
// 删除并释放结点e = q-&
free(q);return OK; } // ListDelete_L算法的时间复杂度为: O(ListLength(L))4.堆排序里面需要多少个辅助清除单位5.一个排序,给出一趟快速排序后的序列结果参考应用题第7题6. 求程序的时间复杂度7. 求单向循环链表的操作单向循环链表:最后一个结点的指针域的指针又指回第一个结点的链表和单链表的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点” 程序设计:带头结点的循环单链表和带头结点的单链表操作实现方法类似.初始化函数:(*head)-&next=NULL 改为(*head)-&next=head在其他函数循环判断条件中:P-&next!=NULL改为 NULL变成head8. 求二叉树上的叶子结点个数叶子结点: 度为零的结点9. 用二分查找需要多少个关键字10. 链式堆栈操作(1)链式堆栈:链式存储结构的堆栈。(2)链式栈的存储结构:它是以头指针为栈顶,在头指针处插入或删除,带头结点的单链式堆栈结构: 链栈中每个结点由两个域构成:data域和next域结点结构体定义如下: typedef struct snode{DataTstruct snode *} LSN链式堆栈的操作实现(1)初始化
StackInitiate(head)void StackInitiate(LSNode **head){*head = (LSNode *)malloc(sizeof(LSNode)) ;
(*head)-&next = NULL;}(2)非空否 StackNotEmpty(head)int StackNotEmpty(LSNode *head){if(head-&next == NULL) return 0;else return 1;}(3)入栈
StackPush(head, x)//把数据元素x插入链式堆栈head的栈顶作为新的栈顶int StackPush(LSNode *head, DataType x) {LSNode *p; p = (LSNode *)malloc(sizeof(LSNode)) ;
p-&data =p-&next = head-&head-&next = return 1;}(4)出栈
StackPop(head, *d)//出栈并把栈顶元素由参数d带回,出栈成功返回1,否则返回0int StackPop(LSNode *head, DataType *d){LSNode *p = head-&if(p == NULL) {printf(&堆栈已空出错!&);return 0;} head-&next = p-&*d = p-& free(p); return 1;}(5)取栈顶数据元素
StackTop(head, d)int StackTop(LSNode *head, DataType *d){LSNode *p = head-&if(p == NULL) {printf(&堆栈已空出错!&);return 0;}*d = p-&return 1;}(6)撤消动态申请空间
Destroy(*head)void Destroy(LSNode *head){LSNode *p, *p1; p =while(p != NULL){p1 =p = p-&free(p1);}}说明:(1) 链栈的入栈、出栈操作就是栈顶的插入与删除操作,修改指针即可完成。 (2)一般不会出现栈满情况;除非没有空间导致malloc分配失败。11.求无向图的结点个数12.求无向图最小生成树的边的个数参考应用题第2,9题13. 一个排序,给出一趟快速排序后的序列结果参考应用题第7题14. 求二叉排序树的遍历二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;(3)它的左、右子树也都分别是二叉排序树。参考应用题第1题15. 求完全二叉树的结点顺序满二叉树:指的是深度为k且含有2k-1个结点的二叉树。完全二叉树:树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应16. 求二叉排序树的平均查找长度
对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的 ASL 值,显然,由值相同的 n 个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长 度的值不同,甚至可能差别很大。 下面讨论平均情况:不失一般性,假设长度为 n 的序列中有 k 个关键字小于第一个关键字,则必有 n-k-1 个关键字大于第一个关键字,由它构造的二叉排序树:的平均查找长度是 n 和 k 的函数P(n, k)
( 0&=k &=n-1 )。假设 n 个关键字可能出现的 n! 种排列的可能性相同,则含 n 个关键字的二叉排序树的平均查找长度:在等概率查找的情况下,
由此 可类似于解差分方程,此递归方程有解: 17. 求无向图邻接表结点个数假若顶点v 和顶点w 之间存在一条边,则称顶点v 和w 互为邻接点,一、 图的数组(邻接矩阵)存储表示
18. 求强连通图边的个数对有向图,任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图。否则,其各个强连通子图称作它的强连通分量。19. 对排序进行比较,比较排序的优缺点一、 时间性能1.
平均的时间性能
时间复杂度为 O(nlogn):快速排序、堆排序和归并排序
时间复杂度为 O(n2): 直接插入排序、起泡排序和简单选择排序
时间复杂度为 O(n): 基数排序
2. 当待排记录序列按关键字顺序有序时,直接插入排序和起泡排序能达到O(n)的时间复杂度,
快速排序的时间性能蜕化为O(n2) 。3. 简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布而改变。二、空间性能(指的是排序过程中所需的辅助空间大小)
1. 所有的简单排序方法(包括:直接插入、起泡和简单选择) 和堆排序的空间复杂度为O(1);
2. 快速排序为O(logn),为递归程序执行过程中,栈所需的辅助空间;
3. 归并排序所需辅助空间最多,其空间复杂度为 O(n);
4. 链式基数排序需附设队列首尾指针,则空间复杂度为 O(rd)。三、排序方法的稳定性能
1. 稳定的排序方法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和经过排序之后,没有改变。
排序之前 :
{ · · · · · Ri(K) · · · · · Rj(K) · · · · · }
排序之后 :
{ · · · · · Ri(K) Rj(K) · · · · ·· · · · · }
2. 当对多关键字的记录序列进行LSD方法排序时,必须采用稳定的排序方法。
排序前 ( 56, 34, 47, 23, 66, 18, 82, 47 )
若排序后得到结果( 18, 23, 34, 47, 47, 56, 66, 82 )则称该排序方法是稳定的;
若排序后得到结果( 18, 23, 34, 47, 47, 56, 66, 82 )则称该排序方法是不稳定的。
对于不稳定的排序方法,只要能举出一个实例说明即可。
对 { 4, 3, 4, 2 } 进行快速排序,
得到 { 2, 3, 4, 4 }
快速排序、堆排序和希尔排序是不稳定的排序方法。 四、关于“排序方法的时间复杂度的下限”本章讨论的各种排序方法,除基数排序外,其它方法都是基于“比较关键字”进行排序的排序方法。可以证明,
这类排序法可能达到的最快的时间复杂度为O(nlogn)。
(基数排序不是基于“比较关键字”的排序方法,所以它不受这个限制。)20.考察排序的空间复杂度参考选择题第19题
复习题  一、选择题。  1.在数据结构中,从逻辑上可以把数据结构分为  C   。  A.动态结构和静态结构    B.紧凑结构和非紧凑结构  C.线性结构和非线性结构   D.内部结构和外部结构  2.数据结构在计算机内存中的表示是指 A  。  A.数据的存储结构  B.数据结构  C.数据的  D.数据元素之间的关系  3.在数据结构中,与所使用的计算机无关的是数据的  A  结构。  A.逻辑  B.存储   C.逻辑和存储   D.物理  4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储  C   。  A.数据的处理方法    B.数据元素的类型  C.数据元素之间的关系  D.数据的存储方法  5.在决定选取何种存储结构时,一般不考虑  A  。  A.各结点的值如何   B.结点个数的多少  C.对数据有哪些运算  D.所用的编程语言实现这种结构是否方便。  6.以下说法正确的是 D   。  A.数据项是数据的基本单位  B.数据元素是数据的最小单位  C.数据结构是带结构的数据项的集合  D.一些表面上很不相同的数据可以有相同的  7.算法分析的目的是 C  ,算法分析的两个主要方面是 A   。  (1)A.找出数据结构的合理性    B.研究算法中的输入和输出的关系  C.分析算法的效率以求改进   C.分析算法的易读性和文档性  (2)A.空间复杂度和时间复杂度   B.正确性和简明性  C.可读性和文档性       D.数据复杂性和程序复杂性  8.下面程序段的时间复杂度是 O(n2)     。  s =0;  for( I =0; i<n; i++)  for(j=0;j<n;j++)  s +=B[i][j];  sum = s ;  9.下面程序段的时间复杂度是 O(n*m)     。  for( i =0; i<n; i++)  for(j=0;j<m;j++)  A[i][j] = 0;  10.下面程序段的时间复杂度是 O(log3n)     。  i = 0;  while(i<=n)  i = i * 3;  11.在以下的叙述中,正确的是  B  。  A.线性表的优于链表存储结构  B.二维数组是其数据元素为线性表的线性表  C.栈的操作方式是先进先出  D.队列的操作方式是先进后出  12.通常要求同一中的所有数据元素具有相同的特性,这意味着 B 。  A.数据元素具有同一特点  B.不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致  C.每个数据元素都一样  D.数据元素所包含的数据项的个数要相等  13.链表不具备的特点是  A  。  A.可随机访问任一结点   B.插入删除不需要移动元素  C.不必事先估计存储空间  D.所需空间与其长度成正比  14.不带头结点的单链表head为空的判定条件是  A  。  next ==NULL  C.head->next ==headD head!=NULL  15.带头结点的单链表head为空的判定条件是  B  。  next ==NULL  C.head->next ==headD head!=NULL  16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用 D  存储方式最节省运算时间。  A.单链表  B.给出表头指针的单循环链表  C.双链表  D.带头结点的双循环链表  17.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是  B  。  A.单链表  B.静态链表  C.线性链表   D.  18.非空的循环单链表head的尾结点(由p所指向)满足 C  。  A.p->next == NULLB.p == NULL  C.p->next ==head    D.p == head  19.在循环双链表的p所指的结点之前插入s所指结点的操作是  D  。  A.p->  prior->  prior  B.p->  prior->  prior  C.s->  prior->next = s  D.s->  prior->  prior = s  20.如果最常用的操作是取第i个结点及其前驱,则采用 D 存储方式最节省时间。  A.单链表  B.双链表  C.单循环链表  D. 顺序表  21.在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 B 。  A.O(1)  B.O(n)  C.O(n2)  D.O(nlog2n)  22.在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行  B 操作与链表的长度有关。  A.删除单链表中的第一个元素  B.删除单链表中的最后一个元素  C.在单链表第一个元素前插入一个新元素  D.在单链表最后一个元素后插入一个新元素  23.与单链表相比,双链表的优点之一是 D 。  A.插入、删除操作更简单  B.可以进行随机访问  C.可以省略表头指针或表尾指针  D.顺序访问相邻结点更灵活  24.如果对线性表的操作只有两种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用  B  。  A.只有表头指针没有表尾指针的循环单链表  B.只有表尾指针没有表头指针的循环单链表  C.非循环双链表  D.循环双链表  25.在长度为n的顺序表的第i个位置上插入一个元素(1≤ i ≤n+1),元素的移动次数为:  A  。  A.n – i + 1B.n – iC.iD.i – 1  26.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为  C  。  A.顺序表            B. 用头指针表示的循环单链表  C.用尾指针表示的循环单链表   D.单链表  27.下述哪一条是的优点?  C  。  A插入运算方便  B可方便地用于各种的存储表示  C存储密度大   D删除运算方便  28.下面关于线性表的叙述中,错误的是哪一个?  B  。  A线性表采用顺序存储,必须占用一片连续的存储单元  B线性表采用顺序存储,便于进行插入和删除操作。  C线性表采用链式存储,不必占用一片连续的存储单元  D线性表采用链式存储,便于进行插入和删除操作。  29.线性表是具有n个  B  的有限序列。  A.字符  B.数据元素   C.数据项    D.表元素  30.在n个结点的线性表的数组实现中,算法的时间复杂度是O(1)的操作是  A  。  A.访问第i(1<=i<=n)个结点和求第i个结点的直接前驱(1<i<=n)  B.在第i(1<=i<=n)个结点后插入一个新结点  C.删除第i(1<=i<=n)个结点  D.以上都不对
31.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为C。  A.O(0)   B.O(1)    C.O(n)    D.O(n2)  32.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为  C  。  A.O(n) O(n)   B.O(n) O(1)    C.O(1) O(n)   D.O(1) O(1)  33.线性表(a1,a2, … ,an)以链式方式存储,访问第i位置元素的时间复杂度为  C  。  A.O(0)   B.O(1)    C.O(n)    D.O(n2)  34.单链表中,增加一个头结点的目的是为了 C  。  A.使单链表至少有一个结点
  B.标识表结点中首结点的位置  C.方面运算的实现        D.说明单链表是线性表的链式存储  35.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是  B  。  A.p->  next=p->  next=p->  next=s;  C.p->  next=s->  next=s->next;p->next=s  36.线性表的顺序存储结构是一种 A  。  A.随机存取的存储结构     B.顺序存取的存储结构  C.索引存取的存储结构     D.Hash存取的存储结构  37.栈的特点是  B  ,队列的特点是 A  。  A.先进先出    B.先进后出  38.栈和队列的共同点是 C  。  A.都是先进后出            B.都是先进先出  C.只允许在端点处插入和删除元素    D.没有共同点  39.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是  C  。  A.edcbaB.decbaC.dceabD.abcde  40.设有一个栈,元素依次进栈的顺序为A、B、C、D、E。下列  C  是不可能的出栈序列。 A.A,B,C,D,E  B.B,C,D,E,AC.E,A,B,C,D   D.E,D,C,B,A  41.以下  B  不是队列的基本运算?  A.从队尾插入一个新元素    B.从队列中删除第i个元素  C.判断一个队列是否为空    D.读取队头元素的值  42.若已知一个栈的进栈序列是1,2,3,,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为  C  。  A.i  B.n-i  C.n-i+1  D.不确定  43.判定一个顺序栈st(最多元素为MaxSize)为空的条件是 B  。  A.st->top !  top == -1  C.st->top !  top == MaxSize  44.判定一个顺序栈st(最多元素为MaxSize)为满的条件是 D  。  A.st->top !  top == -1  C.st->top !  top == MaxSize  45.一个队列的入队序列是1,2,3,4,则队列的输出序列是 B  。  A.4,3,2,1    B.1,2,3,4  C.1,4,3,2    D.3,2,4,1  46.判定一个循环队列qu(最多元素为MaxSize)为空的条件是 C  。  A.qu->rear – qu->  rear – qu->front -1==MaxSize  C.qu->  front -1  47.在循环队列中,若front与rear 分别表示对头元素和队尾元素的位置,则判断循环队列空的条件是  C  。  A.front==rear+1   B.rear==front+1   C.front==rear    D.front==0  48.向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行 D 操作。  A.h->  next=h ;  C.s->  next=h->  next=s ;  49.输入序列为ABC,可以变为CBA时,经过的栈操作为  B 。  A.push,pop,push,pop,push,popB.push,push,push,pop, pop, pop  C.push,push,pop, pop,push,popD.push,pop,push,push,pop, pop  50.若栈采用顺序存储方式存储,现两栈共享空间V[1m],top[1]、top[2]分别代表第1和第2个栈的栈顶,栈1的底在V[1],栈2的底在V[m],则栈满的条件是  B 。  A.|top[2]-top[1]|=0   B. top[1]+1=top[2]  C.top[1]+top[2]=mD.top[1]=top[2]  51.设计一个判别表达式中左、右括号是否配对出现的算法,采用 D  数据结构最佳。  A.线性表的顺序存储结构   B.队列  C.线性表的链式存储结构  D.栈  52.允许对队列进行的操作有 D  。  A.对队列中的元素排序    B.取出最近进队的元素  C.在队头元素之前插入元素  D.删除队头元素  53.对于循环队列  D   。  A.无法判断队列是否为空   B.无法判断队列是否为满  C.队列不可能满       D.以上说法都不对  54.若用一个大小为6的数值来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为  B 。  A.1和5   B.2和4   C.4和2D.5和1  55.队列的“先进先出”特性是指  D   。  A.最早插入队列中的元素总是最后被删除  B.当同时进行插入、删除操作时,总是插入操作优先  C.每当有删除操作时,总是要先做一次插入操作  D.每次从队列中删除的总是最早插入的元素  56.和顺序栈相比,链栈有一个比较明显的优势是 A  。  A.通常不会出现栈满的情况   B. 通常不会出现栈空的情况  C.插入操作更容易实现     D.删除操作更容易实现  57.用不带头结点的单链表存储队列,其头指针指向队头结点,尾指针指向队尾结点,则在进行出队操作时  C  。  A.仅修改队头指针          B.仅修改队尾指针  C.队头、队尾指针都可能要修改    D.队头、队尾指针都要修改  58.若串S=‘software’,其子串的数目是  B  。  A.8   B.37   C.36D.9  59.串的长度是指 B  。  A.串中所含不同字母的个数    B.串中所含字符的个数  C.串中所含不同字符的个数    D.串中所含非空格字符的个数  60.串是一种特殊的线性表,其特殊性体现在 B  。  A.可以顺序存储   B.数据元素是一个字符  C.可以链式存储   D.数据元素可以是多个字符  61.设有两个串p和q,求q在p中首次出现的位置的运算称为 B  。  A.连接   B. 模式匹配  C.求子串  D.求串长  62.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按行存放,元素A[8][5]的起始地址为  C 。  A.SA+141B. SA+144   C.SA+222D.SA+225  63.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按行存放,元素A[5][8]的起始地址为  C  。  A.SA+141B. SA+180   C.SA+222D.SA+225  64.若声明一个浮点数数组如下: froat average[]=new float[30];  假设该数组的内存起始位置为200, average[15]的内存地址是 C  。  A.214    B.215      C.260D.256  65.设二维数组A[1… m,1… n]按行存储在数组B中,则二维数组元素A[i,j]在一维数组B中的下标为  A  。  A.n*(i-1)+jB. n*(i-1)+j-1C.i*(j-1)  D.j*m+i-1  66.有一个100×90的稀疏矩阵,非0元素有10,设每个整型数占2个字节,则用三元组表示该矩阵时,所需的字节数是  B  。  A.20   B. 66C.18 000   D.33  67.数组A[0 … 4,-1 … -3,5…7]中含有的元素个数是 A   。  A.55   B. 45C.36     D.16  68.对矩阵进行压缩存储是为了  D  。  A.方便运算 B. 方便存储  C.提高运算速度  D.减少存储空间  69.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a1,1为第一个元素,其存储地址为1,每个元素占1个地址空间,则a8,5的地址为 B 。  A.13B. 33   C.18D.40  70.稀疏矩阵一般的压缩存储方式有两种,即 C  。  A.二维数组和三维数组    B. 三元组和散列  C.三元组和十字链表     D. 散列和十字链表
71.树最适合用来表示  C 。  A.有序数据元素            B.无序数据元素  C.元素之间具有分支层次关系的数据   D.元素之间无联系的数据  72.深度为5的二叉树至多有  C  个结点。  A.16B. 32  C. 31   C.  10  73.对一个满二叉树,m个叶子,n个结点,深度为h,则 D  。  A.n = h+m  B h+m = 2n  C m = h-1Dn = 2h-1  74.任何一棵二叉树的叶子结点在前序、中序和后序遍历序列中的相对次序  A  。  A.不发生改变   B.发生改变   C.不能确定    D.以上都不对  75.在线索化树中,每个结点必须设置一个标志来说明它的左、右链指向的是树结构信息,还是线索化信息,若0标识树结构信息,1标识线索,对应叶结点的左右链域,应标识为__ D__。  A.00       B.01C.10D.11  76.在下述论述中,正确的是  D  。①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的顺序二叉树的结点个数小于或等于深度相同的满二叉树。  A.①②③  B.②③④   C.②④   D.①④  77.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树的结点个数为n,森林F中第一棵树的结点的个数是  A    。  A.m-n   B.m-n-1   C.n+1D.不能确定  78.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是 B 。  A.9   B.11   C.15D.不能确定  79.具有10个叶子结点的二叉树中有  B  个度为2的结点。  A.8   B.9   C.10  D.11  80.在一个无向图中,所有顶点的度数之和等于所有边数的 C  倍。  A.1/2  B 1C 2   D4  81.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 B 倍。  A.1/2  B 1C 2   D4  82.某二叉树结点的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为:  C  A.3B.2       C.4D.5  83.已知一算术表达式的中缀形式为A+B *C–D/E,后缀形式为ABC *+DE/–,其前缀形式为   D  。  A.–A+B*C/DE    B.–A+B*CD/E   C –+*ABC/DE     D.–+A*BC/DE  84.已知一个图,如图所示,若从顶点a出发按深度搜索法进行遍历,则可能得到的一种顶点序列为____D___;按广度搜索法进行遍历,则可能得到的一种顶点序列为___A___;①A.a,b,e,c,d,fB.a,c,f,e,b,d C.a,e,b,c,f,d,  D.a,e,d,f,c,b②A.a,b,c,e,d,fB.a,b,c,e,f,d C.a,e,b,c,f,d,  D.a,c,f,d,e,b  85.采用邻接表存储的图的深度优先遍历算法类似于二叉树的___A____。  A.先序遍历   B.中序遍历   C.后序遍历   D.按层遍历  86.采用邻接表存储的图的广度优先遍历算法类似于二叉树的___D____。  A.先序遍历   B.中序遍历   C.后序遍历   D.按层遍历  87.具有n 个结点的连通图至少有  A  条边。 A. n-1B. n   C. n(n-1)/2   D. 2n  88.广义表((a),a)的表头是 C ,表尾是 C 。  A.a   B ()  C (a)   D ((a))  89.广义表((a))的表头是 C ,表尾是 B 。  A.a   B ()  C (a)   D ((a))  90.顺序查找法适合于存储结构为  B 的线性表。  A 散列存储   B 顺序存储或链式存储  C 压缩存储   D 索引存储  91.对线性表进行折半查找时,要求线性表必须 B  。  A 以顺序方式存储       B 以顺序方式存储,且结点按关键字有序排列  C 以链式方式存储       D 以链式方式存储,且结点按关键字有序排列  92.采用折半查找法查找长度为n的线性表时,每个元素的平均查找长度为  D  。  AO(n2)    BO(nlog2n)   CO(n)    DO(log2n)  93.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当折半查找值为82的结点时, C  次比较后查找成功。  A. 11      B5       C  4      D8  94.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法  B  。  A  正确      B  错误  95.下面关于B树和B+树的叙述中,不正确的结论是  A  。  AB树和B+树都能有效的支持顺序查找    BB树和B+树都能有效的支持随机查找  CB树和B+树都是平衡的多叉树       DB树和B+树都可用于文件索引结构  96.以下说法错误的是  B    。  A.散列法存储的思想是由关键字值决定数据的存储地址  B.散列表的结点中只包含数据元素自身的信息,不包含指针。  C.负载因子是散列表的一个重要参数,它反映了散列表的饱满程度。  D.散列表的查找效率主要取决于散列表构造时选取的散列函数和处理冲突的方法。  97.查找效率最高的二叉排序树是 C  。  A.所有结点的左子树都为空的二叉排序树。  B.所有结点的右子树都为空的二叉排序树。  C.平衡二叉树。  D.没有左子树的二叉排序树。  98.排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为  C  。  A.希尔排序   B。冒泡排序   C插入排序    D。选择排序  99.在所有的排序方法中,关键字比较的次数与记录的初始排列次序无关的是 D  。  A.希尔排序   B.冒泡排序    C.直接插入排序   D.直接选择排序  100.堆是一种有用的数据结构。下列关键码序列  D  是一个堆。  A.94,31,53,23,16,72B.94,53,31,72,16,23  C.16,53,23,94,31,72D.16,31,23,94,53,72  101.堆排序是一种  B  排序。  A.插入    B.选择    C.交换    D.归并  102.  D  在链表中进行操作比在顺序表中进行操作效率高。  A.顺序查找  B.折半查找  C.分块查找  D.插入  103.直接选择排序的时间复杂度为  D  。(n 为元素个数)  A.O(n)    B.O(log2n)   C.O(nlog2n)  D. O(n2)  二、填空题。  1.数据逻辑结构包括 线性结构  、 树形结构 和 图状结构 三种类型,树形结构和图状结构合称 非线性结构  。  2.数据的逻辑结构分为  集合   、线性结构  、 树形结构 和 图状结构 4种。  3.在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 1 个前驱结点;最后一个结点 没有 后续结点,其余每个结点有且只有 1 个后续结点。  4.线性结构中元素之间存在 一对一 关系,树形结构中元素之间存在 一对多 关系,图形结构中元素之间存在 多对多 关系。  5.在树形结构中,树根结点没有 前驱 结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有 后续 结点,其余每个结点的后续结点可以 任意多个 。  6.数据结构的基本存储方法是 顺序 、 链式 、  索引 和  散列 存储 。  7.衡量一个算法的优劣主要考虑正确性、可读性、健壮性和 时间复杂度与 空间复杂度 。  8.评估一个算法的优劣,通常从 时间复杂度  和 空间复杂度  两个方面考察。  9.算法的5个重要特性是 有穷性 、 确定性 、 可行性 、输入和输出。  10.在一个长度为n的顺序表中删除第i个元素时,需向前移动 n-i-1 个元素。  11.在单链表中,要删除某一指定的结点,必须找到该结点的 前驱 结点。  12.在双链表中,每个结点有两个指针域,一个指向 前驱 结点,另一个指向 后继结点 。  13.在顺序表中插入或删除一个数据元素,需要平均移动 n 个数据元素,移动数据元素的个数与 位置 有关。  14.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表的元素是,应采用 顺序  存储结构。  15.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成       单链表  和 双链表 。  16.顺序存储结构是通过 下标  表示元素之间的关系的;链式存储结构是通过 指针 表示元素之间的关系的。  17.带头结点的循环链表L中只有一个元素结点的条件是 L->next->next=L  。  18. 栈 是限定仅在表尾进行插入或删除操作的线性表,其运算遵循 后进先出 的原则。  19.空串是 零个字符的串 ,其长度等于 零。空白串是由一个或多个空格字符组成的串,其长度等于其包含的空格个数。  20.组成串的数据元素只能是 单个字符 。  21.一个字符串中 任意个连续字符构成的部分 称为该串的子串。  22.子串 ”str” 在主串 ”datastructure” 中的位置是  5  。  23.二维数组M的每个元素是6个字符组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M至少需要 540个字节;M的第8列和第5行共占108个字节。  24.稀疏矩阵一般的压缩存储方法有两种,即 三元组表 和 十字链表 。  25.广义表((a),((b),c),(((d))))的长度是 3 ,深度是 4 。  26.在一棵二叉树中,度为零的结点的个数为n0,度为2 的结点的个数为n2,则有n0=  n2+1 。  27.在有n个结点的二叉链表中,空链域的个数为__n+1__。  28.一棵有n个叶子结点的哈夫曼树共有__2n-1_个结点。  29.深度为5的二叉树至多有 31  个结点。  30.若某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点个数为  69  。  31.某二叉树的前序遍历序列是abdgcefh,中序序列是dgbaechf,其后序序列为 gdbehfca 。  32.线索二叉树的左线索指向其 遍历序列中的前驱    ,右线索指向其遍历序列中的后继 。  33.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是 散列查找法  。  34.在分块索引查找方法中,首先查找  索引表   ,然后查找相应的 块表 。  35.一个无序序列可以通过构造一棵 二叉排序 树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。  36.具有10个顶点的无向图,边的总数最多为__45__。
37.已知图G的邻接表如图所示,其从顶点v1出发的深度优先搜索序列为_v1v2v3v6v5v4_,其从顶点v1出发的广度优先搜索序列为_v1v2v5v4v3v6__。     38.索引是为了加快检索速度而引进的一种数据结构。一个索引隶属于某个数据记录集,它由若干索引项组成,索引项的结构为 关键字 和 关键字对应记录的地址 。  39.Prim 算法生成一个最小生成树每一步选择都要满足 边的总数不超过n-1 , 当前选择的边的权值是候选边中最小的 , 选中的边加入树中不产生回路 三项原则。  40.在一棵m阶B树中,除根结点外,每个结点最多有 m 棵子树,最少有 m/2  棵子树。  三、判断题。  1.在决定选取何种存储结构时,一般不考虑各结点的值如何。(√)  2.抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一个ADT的逻辑特性,不必考虑如何在计算机中实现。(√ )  3.抽象数据类型与计算机内部表示和实现无关。(√  )  4.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( × )  5.线性表采用链式存储结构时,结点和结点内部的存储空间可以是不连续的。( × )  6.对任何数据结构链式存储结构一定优于顺序存储结构。( × )  7.顺序存储方式只能用于存储线性结构。( × )  8.集合与线性表的区别在于是否按关键字排序。( × )  9.线性表中每个元素都有一个直接前驱和一个直接后继。( × )  10.线性表就是顺序存储的表。( × )  11.取线性表的第i个元素的时间同i的大小有关。( × )  12.循环链表不是线性表。( × )  13.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序表中效率高。( √ )  14.双向链表可随机访问任一结点。(× )  15.在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p的后面 :p->  next; (× )  16.队列是一种插入和删除操作分别在表的两端进行的线性表,是一种先进后出的结构。( × )  17. 串是一种特殊的线性表,其特殊性体现在可以顺序存储。( × )  18.长度为1的串等价于一个字符型常量。(× )  19.空串和空白串是相同的。(×)  20.数组元素的下标值越大,存取时间越长。(× )  21.用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。(√ )  22.一个广义表的表头总是一个广义表。(× )  23.一个广义表的表尾总是一个广义表。( √ )  24.广义表((( a ), b), c ) 的表头是(( a ), b),表尾是( c )。( √ )  25.二叉树的后序遍历序列中,任意一个结点均处在其孩子结点的后面。( √ )  26.度为2的有序树是二叉树。( × )  27.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面。( √ )  28.用一维数组存储二叉树时,总是以前序遍历顺序存储结点。(×)  29.若已知一棵二叉树的前序遍历序列和后序遍历序列,则可以恢复该二叉树。( × )  30.在哈夫曼树中,权值最小的结点离根结点最近。(× )  31.强连通图的各顶点间均可达。( √  )  32.对于任意一个图,从它的某个结点进行一次深度或广度优先遍历可以访问到该图的每个顶点。( × )  33.在待排序的记录集中,存在多个具有相同键值的记录,若经过排序,这些记录的相对次序仍然保持不变,称这种排序为稳定排序。(√ )  34.在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。(√ )  35.拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。(× )  36.冒泡排序算法关键字比较的次数与记录的初始排列次序无关。( × )  37.对线性表进行折半查找时,要求线性表必须以链式方式存储,且结点按关键字有序排列。(× )  38.散列法存储的思想是由关键字值决定数据的存储地址。(√ )  39.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。(× )  40.具有n个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的。( √)  41.直接选择排序算法在最好情况下的时间复杂度为O(n)。( × )
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 找出出现次数最多的数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信