一个长度为n的无重复序列入栈有多少种出栈方式
2005年长沙市小学生计算机奥林匹克竞赛初赛试题

2005年长沙市小学生计算机奥林匹克竞赛初赛试题2005年长沙市小学生计算机奥林匹克竞赛初赛试题(语言:TURBO PASCAL 时间:120分钟)参赛证号姓名学校总分一、单项选择题(每小题2分,共40分)1、下列因素中,对计算机工作影响最小的是(B )A、尘土B、噪声C、温度D、湿度2、CPU包括的两部分是(C )A、存储器和运算器B、存储器和控制器C、运算器和控制器D、主机和显示器3、下列计算机网络的功能中,错误的是(C )A、远程教学B、查询资料C、传送能量D、聊天4、下列软件中,属于操作系统是(D )A、PascalB、OfficeC、FlashD、Windows5、下列哪个部件对于个人桌面电脑的正常运行不是必需的(C )A、显卡B、CPUC、光驱6、计算机软件保护法是用来保护软件的(A )A、著作权B、编写权C、使用权D、复制权7、Pascal语言属于计算机的(B )语言。
A、汇编B、高级C、机器D、低级8、将十进制数2005转换成二进制数是(A )A、11111010101B、1111010101C、11111010011D、11110100119、在Pascal语言环境下,运行一个程序,下列快捷键组合正确的是(D )A、ALT+F5B、ALT+F9C、CTRL+F5D、CTRL+F910、下列变量名中,正确的是(B )A、12PASB、PAS12C、VARD、TO11、屏上显示一个数据1.23456000000E+2,它属于下列(B )类型A、INTEGERC、CHARD、BOOLEAN12、执行WRITELN(3.1415926:5:3)的结果为(D )A、3.1B、3.14C、3.141D、3.14213、设A为整数型,B为实数型,则下列赋值语句中正确的是(D )A、A:=3.14B、A:=A/2C、A:=B MOD 2D、B:=A DIV 214、设K、M为正整数,且K<="" p="">2))*K+ORD(M>K)*M的值是(C )A、KB、MC、K+MD、M-K15、设A=…0123456789ABCDEF?,则COPY(COPY(A,3,12),5,5)的值是(D )A、…45678?B、…56789?C、…789AB?D、…6789A?16、表达式98 DIV 2 MOD 5*3-ROUND(2.57+6-2*INT(0.35*4))的值是(A )A、5B、6D、192005年东莞市小学生计算机程序设计竞赛决赛试题(一) pascal语言说明:请将答案填在答题卡上,只交答题卡,时间9:00—11:00一、选择题(每题1分,共10分)1、在WORD中,将一段文字移到整个文档最后,正确的操作步骤的顺序是()(1)打开编辑菜单,选择粘贴命令(2)选择要移动的一段文字使其反黑(3)打开编辑菜单,单击复制命令(4)把光标移到文档的最后A (1)(2)(3)(4)B (3)(2)(4)(1)C (2)(3)(4)(1)D (3)(1)(2)(4)2、/doc/d39ca47710a6f524ccbf85e3.html 中的“cn”代表了()A 国家(中国)B 省市C 用户D 服务器3、64K存储器含()个字节A 64000B 65536C 64536D 327684、计算机病毒一般寄生在()中A 中央处理器C 输入设备D 输出设备5、启动WINDOWS后,不是桌面上常见的图标是()A 我的电脑B 回收站C 控制面板D 我的文档6、在WINDOWS中,使用鼠标打开某个对象快捷菜单的操作方法是()A 单击对象B 双击对象C 拖动对象D 右击对象7、用A表示某个人的总成绩,用B表示这个人的语文成绩,用C 表示这个人的数学成绩。
数据结构判断题

一、判断题 (每题1分,共131分)1. 线性表的逻辑顺序总是与其物理顺序一致。
()【答案】错2. 线性表的顺序存储优于链式存储。
()【答案】错3. 在长度为n的顺序表中,求第i个元素的直接前驱算法的时间复杂度为0(1)。
()【答案】对4. 若一棵二叉树中的结点均无右孩子,则该二叉树的中根遍历和后根遍历序列正好相反。
()【答案】错5. 顺序表和一维数组一样,都可以按下标随机(或直接)访问。
()【答案】对6. 内部排序是指排序过程在内存中进行的排序。
()【答案】对7. 当待排序序列初始有序时,简单选择排序的时间复杂性为O(n)。
()【答案】错8. 用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。
( )【答案】对9. 任何一棵二叉树的叶结点在三种遍历中的相对次序是不变的。
()【答案】对10. 若将一批杂乱无章的数据按堆结构组织起来, 则堆中数据必然按从小到大的顺序线性排列。
( )【答案】错11. 如果采用如下方法定义一维字符数组:int maxSize = 30;char * a = new char[maxSize];则这种数组在程序执行过程中不能扩充。
()【答案】错12. 使用三元组表示稀疏矩阵中的非零元素能节省存储空间。
()【答案】对13. 对稀疏矩阵进行压缩存储是为了节省存储空间。
()【答案】对14. 当向一个最小堆插入一个具有最小值的元素时,该元素需要逐层向上调整,直到被调整到堆顶位置为止。
( )【答案】对15. 哈希查找法中解决冲突问题的常用方法是除留余数法。
()【答案】错16. 对具有n个结点的堆进行插入一个元素运算的时间复杂度为O(n)。
( )【答案】错17. 堆排序是一种稳定的排序算法。
( )【答案】错18. 如果有向图中各个顶点的度都大于2,则该图中必有回路。
( )【答案】错19. 在一个顺序存储的循环队列中, 队头指针指向队头元素的后一个位置。
计算机数据结构习题1附答案

文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持.第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
1.2 填空题:1.常见的数据结构有__结构,_____结构,____结构等三种。
2.常见的存储结构有_________结构,______结构等两种。
3.数据的基本单位是____,它在计算机中是作为一个整体来处理的。
4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,______和_____。
5.《数据结构》课程讨论的主要内容是数据的逻辑结构、存储结构和________。
1.2设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。
解:1.3设有以下三个函数:()10002124++=n n n f ,()3450015n n n g+=,()n n n n h log 5005.3+=请判断以下断言正确与否:(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n 3.5) (5) h(n)是O(nlogn)解:(1)对 (2)错 (3)错 (4)对 (5)错第二章序列2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
数据结构习题

图习题(三)
• 1.如图所示是一个无向网图,请分别按Prim 算法和Kruskal算法求最小生成树。
查找习题(一)
1.已知一个有序表为(12,18,24,35,47,50,62,83,90,115,134), 当折半查找值为 90 的元 素时,经过( )次比较后查找成功。 A2 B3 C4 D5 2.已知 10 个元素(54,28,16,73,62,95,60,26,43),按照依次插入 的方法生成一棵二叉排序树,查找值为 62 的结点所需比较次数为( )。 A2 B3 C4 D5 3.已知数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点 的方法生成一棵二叉排序树,则该树的深度为( )。 A4 B5 C6 D7 4.按( )遍历二叉排序树得到的序列是一个有序序列。 A 前序 B 中序 C 后序 D 层次 5.在散列函数 H(k)= k mod m 中,一般来讲,m 应取( )。 A 奇数 B 偶数 C 素数 D 充分大的数
8.设链栈中结点的结构:data为数据域,next为指针域,且top是栈顶指针。若想 在链栈的栈顶插入一个由指针s所指的结点,则应执行下列( )操作。 A.s->next=top->next;top->next=s; B.top->next=s; C.s->next=top;top=top->next; D.s->next=top;top=s;
D.根据元素查找
线性表习题(二)
1.链表相对于顺序表的优点是: 插入、删除 方便。 2.顺序表中访问任意一个结点的时间复杂度均为 O(1) 。 3.在单链表中要在已知结点*P之前插入一个新结点,需找到 *P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。 4.单链表中需知道 头指针 才能遍历整个链表。 5.在一个长度为n的顺序表中删除第i个元素,要移动 n-i 个元 素。 6.在一个长度为n的顺序表中,如果要在第i个元素前插入一 个元素,要后移 n-i+1 个元素。 7.双链表中,设p是指向其中待删除的结点,则需要执行的操 作为: p->prior->next=p->next 。
数据结构习题及答案

第一章1.在数据结构中,从逻辑上可以把数据结构分为(C )A.动态结构和静态结构 B. 紧凑结构和非紧凑结构C.线性结构和非线性结构 D. 内部结构和外部结构● 2.在数据结构中,与所使用的计算机无关的是( A )A. 逻辑结构B. 存储结构C. 逻辑和存储结构D. 物理结构3.下面程序的时间复杂度为____O(mn)_______。
for (int i=1; i<=m; i++)for (int j=1; j<=n; j++ )S+=i第二章线性表●链表不具备的特点是(A)A 可以随机访问任一结点(顺序)B 插入删除不需要移动元素C 不必事先估计空间D 所需空间与其长度成正比2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B )A head==nullB head->next==nullC head->next==headD head!=null●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D)A 单链表B 双链表C 循环链表D 顺序表● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C)A 顺序表B 用头指针表示的单循环链表C 用尾指针表示的单循环链表D 单链表● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序,则操作的时间复杂度为( D )A O(1)B O(log2n)C O(n2)D O(n)● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长度有关A 删除单链表中第一个元素B 删除单链表中最后一个元素C 在第一个元素之前插入一个新元素D 在最后一个元素之后插入一个新元素●7.与单链表相比,双向链表的优点之一是(D)A 插入删除操作更简单B 可以进行随机访问C 可以省略表头指针或表尾指针D 顺序访问相邻结点更容易●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域(头结点的地址)中存放的是( B )A list的地址B list的内容C list指的链结点的值D 链表第一个链结点的地址●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B )A list2比list1占用更多的存储单元B list1与list2占用相同的存储单元C list1和list2应该是相同类型的指针变量D 双向链表比单链表占用更多的存储单元10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确)11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。
(信息学奥赛辅导)排列与组合基础知识

排列与组合基础知识有关排列与组合的基本理论和公式:加法原理:做一件事,完成它可以有n 类办法,在第一类办法中有m 1种不同的方法,在第二类中办法中有m 2种不同的方法,……,在第n 类办法中有m n 种不同方法。
那么完成这件事共有N=m 1+m 2+…+m n 种不同的方法,这一原理叫做加法原理。
乘法原理:做一件事,完成它需要分成n 个步骤,做第一步有m 1种不同的方法,做第二步有m 2种不同的方法,……,做第n 步有m n 种不同的方法,那么完成这件事共有N =m 1×m 2×…×m n种不同的方法,这一原理叫做乘法原理。
公式:阶乘公式!(1)(2)321n n n n =⋅-⋅-⋅⋅,规定0!=1;全排列公式!n n P n = 选排列公式!(1)(2)(1)()!m n n P n n n n m n m =---+=-、m m m n n m P C P = 圆排列:n 个不同元素不分首位围成一个圆圈达到圆排列,则排列数为:!(1)!n n n =- 组合数公式(1)(2)(1)!!!()!m mn n m m P n n n n m n C P m m n m ---+===-、规定01n C = m n m n n C C -=、11m m m n n n C C C -+=+、0122n n n n n n C C C C ++++=)提示:(1)全排列问题和选排列问题,都可根据乘法原理推导出来。
(2)书写方式:r n P 记为P (n,r );r n C 记为C (n,r )。
加法原理例题:图1中从A 点走到B 点共有多少种方法?(答案:4+2+3=9)乘法原理例题:图2中从A 点走到B 点共有多少种方法?(答案:4×6=24)加法原理与乘法原理综合:图3、图4中从A 走到B 共有多少种方法?(答案:28、42) A B 图1 A B图2A B 图3 A B图4注意:在信息学奥赛中,有许多只需计数而不需具体方案的问题,都可以通过思维转换或方法转换,最后变为两类问题:一类是转变为排列组合问题,另一类是转变为递推公式问题。
已知一个栈的入栈序列是123

已知一个栈的入栈序列是123...n,若pn=n
,使用栈的变换序列解释栈入栈序列
栈可以被认为是一种特殊的线性结构,在栈中只有另外一端可以进行操作,允许push (入栈)和pop(出栈)操作。
在栈中元素以“后进先出”的原则而存储,被称为先进后出(LIFO)。
在栈的变换序列中,如果已知一个栈的入栈序列是123...n,同时如果pn=n,则可以构建这样一个栈的变换序列:首先将1-n压入栈中,接下来顺序出栈,然后将n压入栈中,然后再次出栈,接着将n-1压入栈中,继续出栈。
依次重复出栈压入栈,最终获得完整的栈变换序列。
例如,若某个栈的入栈序列是12345,其pn=5,则我们可以构建栈的变换序列:1234-5-45321。
具体来讲,首先将1-5压入栈中,然后顺序出栈:12345,接下来将5压入栈,然后再次出栈:45,然后3压入栈,继续出栈:45321,最终完成整个变换序列。
总结一下,由一个栈的入栈序列123...n,以及pn=n可以构建出一个完整的栈变换序列。
具体步骤如下:先将1-n压入栈中,然后顺序出栈;继续将n压入栈中,然后再出栈;再依次将n-1,以及其他数字压入栈中,然后再次出栈,直到完成整个变换序列。
栈的面试题目(3篇)

第1篇第一部分:基本概念与操作1. 什么是栈?- 栈是一种线性数据结构,遵循后进先出(LIFO)的原则。
它只允许在栈顶进行插入(push)和删除(pop)操作。
2. 栈的基本操作有哪些?- 入栈(push):在栈顶添加一个新元素。
- 出栈(pop):移除栈顶元素。
- 查看栈顶元素(peek 或 top):获取栈顶元素但不移除它。
- 判断栈是否为空(isEmpty):检查栈中是否没有元素。
- 获取栈的大小(size):返回栈中元素的数量。
3. 请用Python实现一个栈的数据结构。
```pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if not self.is_empty():return self.items.pop()return Nonedef peek(self):if not self.is_empty():return self.items[-1]return Nonedef size(self):return len(self.items)```4. 如何实现一个固定大小的栈?- 在栈类中添加一个计数器来跟踪栈的大小,并在push操作中检查是否已达到最大容量。
5. 请解释栈的两种遍历方法。
- 递归遍历:使用递归方法遍历栈的所有元素。
- 迭代遍历:使用栈的辅助结构(如队列)来实现迭代遍历。
第二部分:栈的应用6. 栈在计算机科学中的应用有哪些?- 函数调用:局部变量和返回地址存储在栈中。
- 表达式求值:逆波兰表达式(RPN)计算。
- 字符串匹配:括号匹配验证。
- 汉诺塔问题:移动塔的步骤可以通过栈来模拟。
7. 请解释如何使用栈实现括号匹配验证。
标准二维表问题

标准⼆维表问题问题描述:设n 是⼀个正整数。
2xn的标准2维表是由正整数1,2,…,2n 组成的2xn 数组,该数组的每⾏从左到右递增,每列从上到下递增。
2xn的标准2维表全体记为Tab(n)。
例如,当n=3时Tab(3)如下:思路分析:⾸先明确⼀下每⾏的数总是左边⼩于后⾯,上⾯⼩于下⾯,以上⾯的第⼀种情况进⾏分析,我们把第⼀⾏的数字对应为1表⽰进栈。
第⼆⾏的数字对应为-1表⽰出栈。
我们知道⼀般情况进栈和出栈时栈⾥⾯的元素个数⼤于等于0,那么数字1看成进栈-1看成出栈,则总数之和要⼤于等于0。
即进出栈操作任何时刻进栈次数⼤于等于出栈的次数。
那么上表的第⼀⾏第⼀个元素表⽰第⼀次是进栈操作,下⾯的4对应的是第⼀次进栈的元素在第四次出栈,第⼀⾏第⼆列2表⽰第⼆次操作是进栈对应对应下⾯的5表⽰第五次操作是出栈,即把第⼆次进栈操作的元素出栈,依次类推,第三次是进栈操作,第六次把第三次进栈的元素弹出栈。
所以我们可以把表看出是元素的进出栈的操作,则tab(n)表⽰求元素个数为n的所有可能进出栈的操作。
于是问题转换为n个元素所有可能进出栈的情况。
⽽求进出栈的所有可能情况的⽅法就是卡特兰数。
下⾯简单介绍⼀下卡特兰数。
事实上,可以认为问题是,任意两种操作,要求每种操作的总次数⼀样,且进⾏第k次操作2前必须先进⾏⾄少k次操作1。
我们假设⼀个⼈在原点,操作1是此⼈沿右上⾓45°⾛⼀个单位(⼀个单位设为根号2,这样他第⼀次进⾏操作1就刚好⾛到(1,1)点),操作2是此⼈沿右下⾓45°⾛⼀个单位。
第k次操作2前必须先进⾏⾄少k次操作1,就是说明所⾛出来的折线不能跨越x轴⾛到y=-1这条线上!在进⾏n次操作1和n此操作2后,此⼈必将到到达(2n,0)!若⽆跨越x轴的限制,折线的种数将为C(2n,n),即在2n次操作中选出n次作为操作1的⽅法数。
现在只要减去跨越了x轴的情况数。
对于任意跨越x轴的情况,必有将与y=-1相交。
信息学竞赛初中组初赛模拟试题

信息学竞赛初中组初赛模拟试题(一)一、选择题(共20题,每题1.5分,共计30分。
每题有5个备选答案,前10个题为单选题,即每题有且只有一个正确答案,选对得分;后10题为不定项选择题,即每题有1至5个正确答案,只有全部选对才得分)1.操作系统是一类重要的系统软件,下面几个软件不属于系统软件的是()。
A)MS-DOS B)Linux C)Java D)Windos 98 E)Unix2. 按照网络覆盖面积和各台计算机相距的远近,计算机网络分为( )A)广域网和局域网 B)信息交换网和广域网C)分布式系统和集中式系统 D)公用网和专用网 E)总线网和星型网3.某计算机的硬盘容量是40G,这里40G=( )字节.A)40 B)40*1000 C)40*1024*1024 D)40*1024*1024*1024 E)40*1000*1000*1000 4.中缀表达式A-(B+C/D)*E的后缀表达式是()。
A)AB-C+D/E* B) ABC+D/-E* C)ABCD/E*+- D)ABCD/+E*- E) AB-CD/-E*5.设一个[1..100,1..100]的二维数组A,每个元素A[i,j]存储时占用两个字节,将A 数组按行优先方式存入从SA开始的连续存储单元中,则元素A[66,65]存储的结束地址是( )。
A)SA+13130 B)SA+13129 C)SA+6565 D)SA+6564 E)SA+131286.Windows操作系统是一种多任务操作系统,各应用程序之间可以非常方便地通过( )来交换数据.A)复制3 B)读/写文件 C)剪贴板 D)剪切 E)粘贴7.多媒体技术中的”多媒体”的含义主要是指如( )等表示信息的形式.A)磁盘、光盘 B)声音、图象 C)电缆、光纤 D)声卡、汇图仪 E)音箱、显示器8.在数据结构中链表是( ).A)顺序存储的线性表结构 B) 非顺序存储的线性表结构C) 顺序存储的非线性表结构 D) 非顺序存储的非线性表结构E) 特殊的树结构9. 计算机辅助教学的简写是 ( ).A)CAI B)CAM C)CAD D)CAS E)CAT10.给定一个正整数N=8934632178,现决定依次删除其中6个数位上的数字(每次删除一个数位上的数字),每次删除后按原来的次序组成一个新数M的值均是当前状态下的最小数,则第四次应该删除的数字是( ).A)6 B)8 C)7 D)4 E)3 11.算法的基本结构有( ).A)顺序 B)选择 C)判断 D)循环 E)重复12.计算机主机由( )组成.A)CPU B)主板 C)机箱 D)主存 E)显示器13.算式(1011)2*(11.1)2的结果是( ).A)(100110.1)2 B)(1011111)2 C)(38.5)10 D)(26.8)16 E)(46.4)814.以下是关于计算机病毒的说法,正确的是( )A)病毒属于计算机软件 B)病毒属于硬件C)病毒具有破坏性、传播性、可激发性、潜伏性、隐蔽性等特点D)若软盘染上病毒,能清除病毒的措施是删除该软盘上的所有文件E)若软盘染上病毒,能清除病毒的措施是格式化该软盘15.下列关于十进制数-100的正确说法是( ).A)原码为11100100B B)反码为E4H C)反码为9BH D)补码为64H E)补码为9CH16.以下是关于排序的说法正确的是( ).A)选择排序、冒泡排序、插入排序是稳定的B)希尔排序、快速排序、堆排序的时间复杂度为O(nlog2n)C)线形排序的时间复杂性为O(n)D)线形排序、二路归并排序的空间复杂度为O(n)E)希尔排序、快速排序、堆排序、归并排序是不稳定的17.下列是关于数据结构的说法正确的是()。
考研计算机专业基础综合(综合应用题)模拟试卷43(题后含答案及解析)

考研计算机专业基础综合(综合应用题)模拟试卷43(题后含答案及解析)题型有:1.1.计算机网络可从哪几个方面进行分类?正确答案:(1)按交换方式:有电路交换、报文交换、分组交换。
(2)按拓扑结构:有集中式网络、分散式网络、分布式网络。
(3)按作用范围:有广域网(wAN)、局域网(LAN)、城域网(MAN)。
(4)按使用范围:有公用网和专用网。
涉及知识点:计算机网络2.说明段表的组成与逻辑段地址到内存物理地址的变换。
正确答案:段表也是一个特定的段,通常被保存在主存中。
段表由多个入口(表项)组成,每个表项由三部分内容构成:段起始地址、段的长度、段的装入位。
段起始地址给出的是本段在主存中的起始地址,该起始地址加上段内地址就得到本段的一个字在主存中的真正地址。
段的长度用于主存使用的合法性检查,当出现段内地址超过段的长度时,就是主存使用中的一个地址越界错误。
段的装入位用于判断本段是否已装入主存。
地址转换过程,从概念上讲可以用如下办法完成:把逻辑地址中的段号与段表基地址的内容相加,用相加之和作地址,找到段表的一个表项,检查该表项中的装入位,其内容为1,表示该段已调入主存,从表项中取段的起始地址与逻辑地址中的段内地址相加,就得到一个数据在主存中的实际地址。
若表项的装入位的值为0,表示该段尚未调入主存,则操作系统负责首先把该段从磁盘装入主存,并相应修改段表中的该表项内容,之后才可以完成地址转换过程。
涉及知识点:计算机组成原理3.假设以I和O分别表示入栈和出栈操作。
栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
(1)下面所示的序列中哪些是合法的? A.IOIIOIOOB.IOOIOIIOC.IIIOIOIOD.IIIOOIOO (2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。
若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。
一个栈进栈序列为1,2,3,…,n,有多少个不同的出栈序列

一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?[4-]常规分析首先,我们设f(n)=序列个数为n的出栈序列种数。
同时,我们假定,从开始到栈第一次出到空为止,这段过程中出栈的序数最大的是k。
特别地,如果栈直到整个过程结束时才空,则k=n首次出空之前第一个出栈的序数k将1~n的序列分成两个序列,其中一个是1~k-1,序列个数为k-1,另外一个是k+1~n,序列个数是n-k。
此时,我们若把k视为确定一个序数,那么根据乘法原理,f(n)的问题就等价于——序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数,即选择k这个序数的f(n)=f(k-1)×f(n-k)。
而k可以选1到n,所以再根据加法原理,将k取不同值的序列种数相加,得到的总序列种数为:f(n)=f (0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)。
看到此处,再看看卡特兰数的递推式,答案不言而喻,即为f(n)=h(n)= C (2n,n)/(n+1)= c(2n,n)-c(2n,n+1)(n=0,1,2,……)。
最后,令f(0)=1,f(1)=1。
非常规分析对于每一个数来说,必须进栈一次、出栈一次。
我们把进栈设为状态‘1’,出栈设为状态‘0’。
n个数的所有状态对应n个1和n个0组成的2n位二进制数。
由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。
在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。
从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。
不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。
顺序栈的入栈和出栈算法

顺序栈的入栈和出栈算法
顺序栈是一种使用数组实现的栈结构,下面是顺序栈的入栈(push)和出栈(pop)算法的示例:
1. 入栈算法(push):
1. 检查栈是否已满(栈顶指针是否等于数组长度-1):
-如果已满,表示栈已经没有空间可供入栈操作,抛出栈满异常或进行相应的错误处理。
-如果未满,继续下一步。
2. 将要入栈的元素放入栈顶位置(栈顶指针加1),即将元素赋值给数组对应位置。
3. 更新栈顶指针。
4. 入栈完成。
2. 出栈算法(pop):
1. 检查栈是否为空(栈顶指针是否等于-1):
-如果为空,表示栈已经没有元素可供出栈操作,抛出栈空异常或进行相应的错误处理。
-如果不为空,继续下一步。
2. 将栈顶元素取出(栈顶指针位置的元素)。
3. 更新栈顶指针(减1)。
4. 返回被取出的栈顶元素。
5. 出栈完成。
注意:在使用顺序栈时,需要事先定义一个固定大小的数组来存储栈元素,并且要注意栈的空栈和满栈状态的判断,以避免出现溢出或下溢的情况。
计算机专业基础综合数据结构栈和队列历年真题试卷汇编7_真题-无答案

计算机专业基础综合数据结构(栈和队列)历年真题试卷汇编7(总分74,考试时间90分钟)1. 单项选择题1. 若循环队列使用C数组A[m]存放其数据元素,已知头指针front指向队首元素,尾指针rear指向队尾元素后的空单元,则当前队列中的元素个数为( )。
【华中科技大学2007一、3(2分)】A. (rear—front+m)%mB. rear-front+1C. rear-frontD. rear-front-12. 设顺序队列的容量为MaxSize,其头指针为front,尾指针为rear,空队列的条件为( )。
【电子科技大学2008一、4(2分)】A. front=rearB. front=-MaxSizeC. front+1=rearD. rear=03. 循环队列存储在数组A[0.m]中,则入队时的操作为( )。
【中山大学1999一、6(1分)】A. rear=rear+1B. rear=(rear-H)mod(m一1)C. rear=(rear+1)modmD. rear=(rear+1)mod(m+1)4. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )【浙江大学1999四、1(4分)】A. 1和5B. 2和4C. 4和2D. 5和15. 已知输入序列为abcd,经过输出受限的双向队列后能得到的输出序列有( )。
【西安交通大学1996三、3(3分)】A. dacbB. cadbC. dbcaD. bdacE. 以上答案都不对6. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是( )。
【西安电子科技大学1996一、5(2分)】【烟台大学2007一、5(2分)】A. 1234B. 4132C. 4231D. 42137. 最大容量为n的循环队列,队尾指针是rear,队头是frunt,则队空的条件是( )。
计算机考研数据结构统考历年真题2009-2016年

目前刚整理了2009-2015 的试题过几天2016 的也会上传上去希望对你有帮助。
20091. 为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是A.栈B. 队列C. 树D. 图2. 设栈S和队列Q的初始状态均为空,元素abcdefg 依次进入栈S。
若每个元素出栈后立即进入队列Q,且7 个元素出队的顺序是bdcfeag,则栈S的容量至少是 A .1 B.2 C.3 D.43. 给定二叉树图所示。
设N代表二叉树的根,L 代表根结点的左子树,R代表根结点的右子树。
若遍历后的结点序列为3,1,7,5,6,2,4,则其遍历方式是 A .LRN B.NRL C.RLN D.RNL4. 下列二叉排序树中,满足平衡二叉树定义的是5. 已知一棵完全二叉树的第 6 层(设根为第 1 层)有8 个叶结点,则完全二叉树的结点个数最多是A.39 B.52 C.111 D.1196. 将森林转换为对应的二叉树,若在二叉树中,结点u 是结点v 的父结点的父结点,则在原来的森林中,u 和v 可能具有的关系是I .父子关系II. 兄弟关系III.u 的父结点与v 的父结点是兄弟关系A.只有IIB.I 和IIC.I 和IIID.I 、II 和III7. 下列关于无向连通图特性的叙述中,正确的是I .所有顶点的度之和为偶数II. 边数大于顶点个数减 1 III. 至少有一个顶点的度为 1A.只有IB. 只有IIC.I 和IID.I 和III8. 下列叙述中,不符合m阶B树定义要求的是A.根节点最多有m棵子树 B. 所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D. 叶结点之间通过指针链接9. 已知关键序列5,8,12,19,28,20,15,22 是小根堆(最小堆),插入关键字3,调整后得到的小根堆是A.3,5,12,8,28,20,15,22,19B.3,5,12,19,20,15,22,8,28C.3,8,12,5,20,15,22,28,19D.3,12,5,8,28,20,15,22,1910. 若数据元素序列11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是A.起泡排序 B. 插入排序 C. 选择排序 D. 二路归并排序41.(10 分)带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。
回溯法习题汇总

回溯法习题汇总1.1 马拦过河卒源程序名knight.???(pas, c, cpp)可执行文件名knight.exe输入文件名knight.in输出文件名knight.out【问题描述】棋盘上A点有一个过河卒,需要走到目标B点。
卒行走的规则:可以向下、或者向右。
同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。
因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。
现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
【输入】一行四个数据,分别表示B点坐标和马的坐标。
【输出】一个数据,表示所有的路径条数。
【样例】knight.in knight.out6 6 3 3 6【算法分析】从起点开始往下走(只有两个方向可以走),如果某个方向可以走再继续下一步,直到终点,此时计数。
最后输出所有的路径数。
这种方法可以找出所有可能走法,如果要输出这些走法的话这种方法最合适了,但是本题只要求输出总的路径的条数,当棋盘比较大时,本程序执行会超时,此时最好能找出相应的递推公式更合适,详见后面的递推章节。
1.2 出栈序列统计源程序名stack1.???(pas, c, cpp)可执行文件名stack1.exe输入文件名stack1.in输出文件名stack1.out【问题描述】栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。
你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。
现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。
请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。
【输入】一个整数n(1<=n<=15)【输出】一个整数,即可能输出序列的总数目。
计算机专业基础综合历年真题试卷汇编1

计算机专业基础综合历年真题试卷汇编1(总分:62.00,做题时间:90分钟)一、单项选择题(总题数:27,分数:54.00)1.单项选择题1-40小题。
下列每题给出的四个选项中,只有一个选项是最符合题目要求的。
(分数:2.00)__________________________________________________________________________________________解析:2.先序序列为a,b,c,d的不同二叉树的个数是_______。
(分数:2.00)A.13B.14 √C.15D.16解析:解析:根据二叉树前序遍历和中序遍历的递归算法中递归工作栈的状态变化得出:前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序。
因为前序序列和中序序列可以唯一地确定一棵二叉树,所以题意相当于“以序列a,b,c,d为入栈次序,则出栈序列的个数为?”,对于n个不同元素进栈,出栈序列的个数为 C 2n n =14。
3.假设栈初始为空,将中缀表达式a/b+(c*d-e*f)/g转换为等价的后缀表达式的过程中,当扫描到f时,栈中的元素依次是_______。
(分数:2.00)A.+(*-B.+(-* √C./+(*-*D./+-*解析:解析:将中缀表达式转换为后缀表达式的算法思想如下:从左向右开始扫描中缀表达式;遇到数字时,加入后缀表达式;遇到运算符时: a.若为‘(’,入栈; b.若为‘)’,则依次把栈中的的运算符加入后缀表达式中,直到出现‘(’,从栈中删除‘(’; c.若为除括号外的其他运算符,当其优先级高于除‘(’以外的栈顶运算符时,直接入栈。
否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。
当扫描的中缀表达式结束时,栈中的所有运算符依次出栈加入后缀表达式。
4.在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是_______。
入栈顺序为abcdef,求出栈顺序有多少种

⼊栈顺序为abcdef,求出栈顺序有多少种必须要选第⼀个⼊栈元素为参考元素。
因为假如第i个⼊栈元素是在第i个前出栈,则会对它前⾯的元素产⽣限制。
如⼊栈顺序为123,若3第⼀个出栈,则后⾯只能是21的顺序,即321。
所以选第⼀个⼊栈元素为参考元素,⽆论将它放到哪个位置,都不会对其他元素产⽣影响。
故公式为:int sum[n] = 0;//n个数的出栈顺序总和for(int i=1;i<=n;i++){f[i] = sum[i-1] * sum[n-i];//f(i):当第⼀个⼊栈元素第i个出栈sum[n]+=f[i];}其中,f(i)的含义是当第⼀个⼊栈元素第i个出栈时,有多少种出栈⽅法。
如1,2,3,4⼊栈,f(2)为1第⼆个出栈,等于sum[1] * sum[2];即为前(i-1)个有多少种出栈顺序 * 后(i-n)个与多少种出栈顺序。
最后,将第⼀个元素在各个位置的种类累加,就得到n个数的出栈顺序总和。
代码如下:#include<iostream>using namespace std;#include<cstdlib>int main(){int count;cin>>count;int sum[count+1],f[count+1];sum[0] = 1;sum[1] = 1;for(int i = 2;i<=count;i++){sum[i] = 0;}for(int j=2;j<=count;j++){for(int i=1;i<=j;i++){f[i] = sum[i-1]*sum[j-i];sum[j]+= f[i];}}cout<<sum[count]<<endl;system("pause");return 0;}。
c语言 所有出栈顺序

在C语言中,可以使用一个二维数组来表示一个栈的所有出栈顺序。
假设栈的最大容量为n,那么二维数组的行数就是n+1行,每一行表示一个入栈顺序,列数也是n+1,表示每个入栈顺序下的出栈顺序。
下面是一个示例代码,可以输出一个栈的所有出栈顺序:```c#include <stdio.h>#define MAX_SIZE 10void print_stack_order(int stack[], int n) {int i, j;for (i = 0; i <= n; i++) {printf("入栈顺序%d:", i);for (j = 0; j <= n; j++) {if (j == n - i) {printf("(%d, %d)", stack[j], n - i);} else {printf("%d ", stack[j]);}}printf("\n");}}int main() {int stack[MAX_SIZE];int n = 5; // 栈的最大容量为5int i;for (i = 0; i <= n; i++) {stack[i] = i; // 初始化栈,每个元素为下标i}print_stack_order(stack, n);return 0;}```在上面的代码中,我们定义了一个函数print_stack_order,用于输出一个栈的所有出栈顺序。
该函数接受两个参数:一个整型数组stack,表示当前栈中的元素;一个整型变量n,表示栈的最大容量。
在函数中,我们使用两个循环来遍历所有入栈顺序和出栈顺序,并输出每个入栈顺序下的出栈顺序。
需要注意的是,在输出出栈顺序时,我们使用了一个判断语句来判断当前元素是否是最后一个出栈的元素,如果是,就输出它和当前的入栈顺序,否则只输出它本身。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
——by hahabrother
这是一个很有趣的问题,例如1、2、3这三个数字,入栈并出栈共有5种方式,分别为:321、312、231、213、123。那么对于长度为n的无重复序列中所有的出栈方式有哪些呢?
为了设计计算的算法,我们可以用队列(queue)来模拟输入,队列的输出则按照原先序列的顺序。使用一个栈(stack)来模拟入栈和出栈,结果保存在另外一个队列(queue)中。
cout<<i.front();
i.pop();
}
cout<<endl;
}
void dostack(queue <int> in,stack <int> s,queue <int> out)
{
if(in.empty())
{
if(s.empty())
{
res++;
print(out);
}
else
{
out.push(s.top());
s.pop();
dostack(in,s,out);
}
}
else
{
if(!s.empty())
{
stack <int> ts;
queue <int> tin,tout;
tin=in;
ts=s;
tout=out;
tout.push(ts.top());
ts.pop();
dostack(tin,ts,tout);
void clear(stack <int> &s)
{
while(!s.empty())
s.pop();
}
void clear(queue <int> &s)
{
while(!s.empty())
s.pop();
}
void print(queue <int> i)
{
while(!iቤተ መጻሕፍቲ ባይዱempty())
{
输入队列出队一个数并压入中间栈
dostack(输入队列,中间栈,输出队列)
其基本思想为对于中间栈的每一个时刻拍照,都递归其后续的所有可能,由于在递归返回的时候还需要递归前的信息,所以每次递归都是新建数据结构而保存当前时刻的状态。若输入队列已经为空,则中间栈只有一种出栈方式,中间栈也为空时递归结束。
详细代码如下:
输入为序列的长度n,初始化序列为1,2,3…n,而输出则为所有可能的出栈数列。
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int n,i,j;
int res;
stack <int> s;
queue <int> in,out;
dostack(输入队列,中间栈,输出队列)
if(输入队列为空)
if(中间栈为空)
输出输出队列中的结果
else
中间栈出栈,放入输出队列
dostack(输入队列,中间栈,输出队列)
else
if(中间栈非空)
新建输入队列2、中间栈2、输出队列2
中间栈2出栈并放入输出队列2
dostack(输入队列2,中间栈2,输出队列2)
cout<<res<<endl;
}
return 0;
}
现在的问题来了,怎么样可以实现所有的出栈入栈操作。首先来看看出栈和入栈是怎么回事,对于123这个序列,1先入栈之后有两种选择,1出栈和2入栈,而若2已经入栈之后,在2出栈之前1则不能先行出栈,故对于1我们只需要考虑其在2入栈之前出栈的情况,若1在栈内时2入栈,则1与2只能看成一个整体。
这样就可以用递归的方式求解,伪代码如下:
}
s.push(in.front());
in.pop();
dostack(in,s,out);
}
}
int main()
{
while(cin>>n)
{
res=0;
clear(in);
clear(out);
clear(s);
for(i=n;i>=1;i--)
in.push(i);
dostack(in,s,out);