关于数据结构栈的应用题

关于数据结构栈的应用题

数据结构中的栈是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈常用于解决各种实际问题,下面我将从多个角

度给出栈的应用题的例子。

1. 括号匹配问题:

栈可以用于解决括号匹配问题。例如,给定一个包含括号的

字符串,我们可以使用栈来检查括号是否匹配。遍历字符串,当遇

到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否

为对应的左括号,如果是,则弹出栈顶元素,继续遍历;如果不是,则括号不匹配。最后,如果栈为空,则表示所有括号都匹配。

2. 浏览器的前进和后退功能:

浏览器的前进和后退功能可以使用栈来实现。当用户浏览网

页时,每当访问一个新页面,该页面的URL就会被压入栈中。当用

户点击后退按钮时,栈顶的URL会被弹出,用户就会返回上一个页面。当用户点击前进按钮时,可以将弹出的URL重新压入栈中,用

户就会前进到下一个页面。

3. 函数调用的追踪:

在编程中,函数的调用可以使用栈来追踪。当一个函数被调

用时,函数的相关信息(如参数、返回地址等)会被压入栈中。当

函数执行完毕后,栈顶的信息会被弹出,程序会回到调用该函数的

位置继续执行。

4. 表达式求值:

栈可以用于解决表达式求值问题。例如,给定一个包含加减

乘除运算符的表达式,我们可以使用栈来计算其结果。遍历表达式,当遇到数字时,将其压入栈中;当遇到运算符时,从栈中弹出两个

数字进行运算,并将结果压入栈中。最后,栈中剩下的数字就是表

达式的计算结果。

5. 撤销操作:

在编辑器或者文字处理软件中,撤销操作可以使用栈来实现。每当用户进行一次操作(如插入、删除、替换文本等),将该操作

的信息压入栈中。当用户点击撤销按钮时,弹出栈顶的操作信息,

将文本恢复到之前的状态。

以上是栈的一些应用题的例子,它们展示了栈在不同领域的实际应用。通过合理地利用栈这种数据结构,我们可以解决各种实际问题。

关于数据结构栈的应用题

关于数据结构栈的应用题 数据结构中的栈是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈常用于解决各种实际问题,下面我将从多个角 度给出栈的应用题的例子。 1. 括号匹配问题: 栈可以用于解决括号匹配问题。例如,给定一个包含括号的 字符串,我们可以使用栈来检查括号是否匹配。遍历字符串,当遇 到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否 为对应的左括号,如果是,则弹出栈顶元素,继续遍历;如果不是,则括号不匹配。最后,如果栈为空,则表示所有括号都匹配。 2. 浏览器的前进和后退功能: 浏览器的前进和后退功能可以使用栈来实现。当用户浏览网 页时,每当访问一个新页面,该页面的URL就会被压入栈中。当用 户点击后退按钮时,栈顶的URL会被弹出,用户就会返回上一个页面。当用户点击前进按钮时,可以将弹出的URL重新压入栈中,用 户就会前进到下一个页面。

3. 函数调用的追踪: 在编程中,函数的调用可以使用栈来追踪。当一个函数被调 用时,函数的相关信息(如参数、返回地址等)会被压入栈中。当 函数执行完毕后,栈顶的信息会被弹出,程序会回到调用该函数的 位置继续执行。 4. 表达式求值: 栈可以用于解决表达式求值问题。例如,给定一个包含加减 乘除运算符的表达式,我们可以使用栈来计算其结果。遍历表达式,当遇到数字时,将其压入栈中;当遇到运算符时,从栈中弹出两个 数字进行运算,并将结果压入栈中。最后,栈中剩下的数字就是表 达式的计算结果。 5. 撤销操作: 在编辑器或者文字处理软件中,撤销操作可以使用栈来实现。每当用户进行一次操作(如插入、删除、替换文本等),将该操作 的信息压入栈中。当用户点击撤销按钮时,弹出栈顶的操作信息, 将文本恢复到之前的状态。

数据结构计算题及参考答案

数据结构计算题及参考答案 数据结构计算题及参考答案 数据结构是计算机科学中的重要概念,它用于组织和管理数据。在计算机科学 的学习过程中,我们经常会遇到一些与数据结构相关的计算题。这些题目旨在 帮助我们加深对数据结构的理解,并提高我们的编程能力。在本文中,我将为 大家提供一些常见的数据结构计算题及其参考答案。 1. 栈的应用题 栈是一种具有后进先出(Last In First Out)特性的数据结构。下面是一个栈的 应用题: 题目:使用栈判断一个字符串中的括号是否匹配。 解答:我们可以遍历字符串中的每个字符,如果遇到左括号,则将其入栈;如 果遇到右括号,则判断栈顶元素是否为对应的左括号,如果是,则将栈顶元素 出栈,继续遍历下一个字符;如果不是,则说明括号不匹配。最后,如果栈为空,则说明字符串中的括号全部匹配,否则不匹配。 2. 队列的应用题 队列是一种具有先进先出(First In First Out)特性的数据结构。下面是一个队 列的应用题: 题目:使用队列模拟击鼓传花游戏。 解答:我们可以使用队列来模拟击鼓传花游戏。首先,将所有参与游戏的人依 次加入队列。然后,从队列中取出第一个人,并将其加入队尾。重复这个过程,直到传花的次数达到指定的次数。最后,队列中的最后一个人即为被淘汰的人。 3. 链表的应用题

链表是一种常见的动态数据结构,它可以在运行时动态分配内存。下面是一个链表的应用题: 题目:反转链表。 解答:我们可以使用迭代或递归的方式来反转链表。迭代的方法是从链表头开始,依次将每个节点的指针方向反转。递归的方法是先反转链表的子链表,然后将当前节点的指针指向前一个节点。最后,将链表的头节点指向反转后的链表的头节点。 4. 树的应用题 树是一种非常重要的数据结构,它具有层次结构和分支结构。下面是一个树的应用题: 题目:计算二叉树的深度。 解答:我们可以使用递归的方式来计算二叉树的深度。对于一个二叉树,它的深度等于左子树的深度和右子树的深度中的较大值加1。递归的终止条件是当节点为空时,返回0。 通过以上的计算题,我们可以更好地理解和应用数据结构。数据结构不仅仅是一种抽象的概念,它在实际编程中起到了至关重要的作用。通过解决这些计算题,我们可以提高我们的编程能力,培养我们的逻辑思维能力,并加深对数据结构的理解。 总结起来,数据结构计算题是一种锻炼编程能力和加深对数据结构理解的有效方式。通过解决栈、队列、链表和树等不同类型的计算题,我们可以更好地掌握数据结构的应用和实现。希望本文提供的计算题及其参考答案能够对大家在学习数据结构的过程中有所帮助。

数据结构栈和队列习题及答案

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

数据结构应用题练习

数据结构应用题练习 一、简介 数据结构是计算机科学中的重要概念,是指数据组织、管理和存储的方式。它是计算机处理和分析数据的基础,在各个领域都有广泛的应用。本文将通过几个数据结构应用题的练习,展示数据结构在实际问题中的应用。 二、链表应用题 链表是一种常见的数据结构,在许多场景中都有广泛的应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用链表来存储并实现以下操作: 1. 添加学生信息 2. 删除学生信息 3. 查找学生信息 4. 修改学生信息 三、栈应用题 栈是一种后进先出(LIFO)的数据结构,在很多应用中都有不可或缺的地位。以网页浏览器的前进和后退功能为例,使用栈可以很方便地实现该功能。请描述如何使用栈来实现浏览器的前进和后退功能,并分析算法的时间复杂度。

四、队列应用题 队列是一种先进先出(FIFO)的数据结构,常用于处理排队等场景。现假设有一个任务队列,多个任务需要按照顺序执行。请使用队列来 存储任务,并实现以下操作: 1. 添加任务到队列 2. 从队列中取出并执行任务 3. 判断队列是否为空 4. 清空队列中的所有任务 五、树应用题 树是一种重要的非线性数据结构,在很多领域都有广泛应用。假设 有一组学生的信息,包括学生姓名、年龄和成绩,请使用树来存储这 些信息,并实现以下操作: 1. 添加学生信息到树中 2. 从树中查找指定学生的信息 3. 删除指定学生的信息 4. 获取树中所有学生的平均成绩 六、图应用题

图是一种用于描述事物之间关系的数据结构,在网络分析、路径规划等领域有广泛应用。假设有一张地图,其中包含若干城市和连接它们的道路,请使用图来存储地图信息,并实现以下操作: 1. 添加城市和道路到图中 2. 查找两个城市之间的最短路径 3. 删除某个城市及其相关的道路 4. 统计图中有多少个孤立的城市 七、哈希表应用题 哈希表是一种通过散列函数实现高效存储和查找的数据结构,在很多场景中都有广泛应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用哈希表来存储这些信息,并实现以下操作: 1. 添加学生信息到哈希表中 2. 从哈希表中查找指定学生的信息 3. 删除指定学生的信息 4. 统计哈希表中学生信息的个数 八、总结 以上是几个常见的数据结构应用题的练习,通过这些练习可以更深入地理解数据结构的应用和算法的设计。数据结构是计算机科学中非常重要的一个领域,其应用广泛且多样化。在实际问题中,合理选择

《数据结构》应用题参考习题

《数据结构》应用题参考习题数据结构是计算机科学中的一门基础课程,它主要研究数据的组织、存储和管理方式,以及不同数据结构对算法执行效率的影响。在实际 应用中,数据结构起到了至关重要的作用。本文将介绍一些《数据结构》的应用题,并给出相应的参考习题。 一、栈的应用题 1. 符号匹配问题 问题描述:给定一个字符串,在其中包含了一些圆括号"()"、方括号"[]"和花括号"{}",判断字符中的括号是否匹配。 例题:判断字符串"{[()]()}"是否匹配。 解题思路:利用栈的先进后出特点,遍历字符串中的每个字符。如 果是左括号,则入栈;如果是右括号,则判断栈顶元素是否与之匹配。 参考习题:编写一个程序,实现括号匹配的功能,并输出匹配结果。 二、队列的应用题 1. 循环队列的应用 问题描述:设计一个循环队列,实现入队、出队等基本操作。 解题思路:利用数组实现循环队列,需要设置一个队头指针front 和一个队尾指针rear。入队操作时,将元素添加到rear位置;出队操作时,返回front位置元素,并将front后移。

参考习题:实现一个循环队列,并进行相关操作的测试。 三、链表的应用题 1. 单链表反转 问题描述:给定一个单链表,将其反转。 例题:将链表1->2->3->4->5反转为5->4->3->2->1。 解题思路:利用三个指针prev、cur和next,依次遍历链表,并修 改指针指向实现链表的反转。 参考习题:编写一个程序,实现单链表反转,并输出反转后的链表。 四、树的应用题 1. 二叉树的遍历 问题描述:给定一个二叉树,实现它的前序遍历、中序遍历和后序 遍历。 解题思路:分别使用递归和迭代的方式实现二叉树的前序遍历、中 序遍历和后序遍历。 参考习题:编写一个程序,实现二叉树的前序遍历、中序遍历和后 序遍历,并输出遍历结果。 五、图的应用题 1. 图的最短路径

计算机专业基础综合数据结构(栈和队列)历年真题试卷汇编1

计算机专业基础综合数据结构(栈和队列)历年真题试卷汇编1 (总分:56.00,做题时间:90分钟) 一、综合题(总题数:24,分数:56.00) 1.将两个栈S1和S2存入数组V[1.m]应如何安排最好?请写出栈顶指针top的初始值和判断栈空、栈满的条件是什么?【东南大学1998一、5(6分)】【烟台大学2007四、1(5分)】 (分数:2.00) __________________________________________________________________________________________ 正确答案:(正确答案:设栈S1和栈S2共享向量V[1一m],初始时,栈S1的栈顶指针top[0]=0,栈S2 的栈顶指针top[1]=m+1,当top[0]=0时为左栈空,top[1]=m+1时为右栈空;当top[0]=0并且top[1]=m+1时为全栈空。当top[1]-top[0]=1时为栈满。) 解析: 2.若有一个一维数组A,它的元素下标从1开始到MAX。要在数组A中建立两个栈共享同一空间,栈S1的栈顶指针为top1,栈S2的栈顶指针为top2,为了最大限度地利用数组A的空间,则应该如何共享?栈满和栈空的条件是什么?【北京理工大学2006十一、3(5分)】 (分数:2.00) __________________________________________________________________________________________ 正确答案:(正确答案:两栈共享数组A,top1=0时S1栈空,top2=MAX+1时,S2栈空;top2一top1=1时栈满。) 解析: 3.设输入序列为a,b,c,d,试写出借助一个栈可得到的两个输出序列和两个不能得到的输出序列。【北京科技大学2001一、4(2分)】 (分数:2.00) __________________________________________________________________________________________ 正确答案:(正确答案:n个元素的排列有n!种,但借助栈结构,n个入栈元素只可得到1/(n+1)((2n)! /(n!*n!))种出栈序列,这个数小于,l!。本题4个元素,可有14种出栈序列,abcd和dcba就是其中两种;有10(41—14=10)种排列得不到,其中,dabc和adbc是不可能得到的两种。) 解析: 4.试证明:若借助栈由输入序列1,2,…,n得到输出序列为P 1,P 2,…,P n (它是输入序列的一个排列),则在输出序列中不可能出现这样的情形:存在着P f k i。【上海交通大学1998二(15分)】 (分数:2.00) __________________________________________________________________________________________ 正确答案:(正确答案:如果i i在p j入栈前先出栈。而对于p i>p j的情况,则说明要将p i压到p j之上, 也就是在p j出栈之后p i才能出栈。这就说明,对于i<j<k,不可能出现P j k i的输出序列。换句话说,对于输入序列1,2,3,不可能出现3,1,2的输出序列。 ) 解析:

计算机学科专业基础综合数据结构-栈、队列和数组(二)

计算机学科专业基础综合数据结构-栈、队列和数组(二) (总分:53.00,做题时间:90分钟) 一、{{B}}单项选择题{{/B}}(总题数:37,分数:37.00) 1.对一个初始为空的栈s执行操作Push(s,5),Push(s,2),Push(s,4),Pop(s,x),getTop(s,x)后,x的值应是______。 ? A.5 ? B.2 ? C.4 ? D.0 (分数:1.00) A. B. √ C. D. 解析:[解析] 连续执行3次元素进栈操作后,栈内的数据为5,2,4,此时执行退栈操作1次,栈内元素为5和2,栈顶读到x中应为2。 2.用S表示进栈操作,用X表示出栈操作,若元素的进栈顺序是1,2,3,4,为了得到出栈顺序1,3,4,2,相应的S和X的操作序列为______。 ? A.SXSXSSXX ? B.SSSXXSXX ? C.SXSSXXSX ? D.SXSSXSXX (分数:1.00) A. B. C. D. √ 解析:[解析] 此题可以用排除法来解决。由选项A、B、C所得出的栈序列分别为(1,2,4,3)、(3,2,4,1)、(1,3,2,4),可以看出都是错误的。选项D得到的出栈序列为1,3,4,2。 3.已知一个栈的进栈序列为1,2,3,…,n,其输出序列的第一个元素是i,则第j个出栈元素是______。 ? A.j-i ? B.n-i ? C.j-i+1 ? D.不确定 (分数:1.00) A. B.

C. D. √ 解析:[解析] i出栈时,1,2,…,i-l都在栈内,之后的过程中还可能有i之后的元素进栈,但究竟第j个出栈元素是哪个,不能确定。 4.已知一个栈的进栈序列为1,2,3,…,n,其输出序列是p1,p2,p3,…,p n。若p1=3,则p2的值______。 ? A.一定是2 ? B.一定是1 ? C.可能是1 ? D.可能是2 (分数:1.00) A. B. C. D. √ 解析:[解析] 元素3第一个出栈时,元素1,2一定在栈内,下一个出栈的元素是2,不可能是1。当然还可以是元素2暂时不出栈,元素4,5,…进栈。 5.已知一个栈的进栈序列为p1,p2,p3,…,p n,其输出序列是1,2,3,…,n。若p3=1,则p1的值______。 ? A.一定是2 ? B.可能是2 ? C.不可能是2 ? D.一定是3 (分数:1.00) A. B. C. √ D. 解析:[解析] p3=1,输入序列为p1,p2,1,p4,…,因为p3=1,所以p3出栈前,p1,p2必在栈中。若p1出栈,则p2必先于p1出栈,因此p1不可能为2。 6.以下有关顺序栈的操作中,正确的是______。 ? A.n个元素进入一个栈后,它们的出栈顺序一定与进栈顺序相反(一次性进栈完毕后再出栈) ? B.若一个栈的存储空间为S[n],则对栈的进栈和出栈操作最多只能执行n次 ? C.栈是一种对进栈和出栈操作的次序做了限制的线性表 ? D.空栈没有栈顶指针 (分数:1.00) A. √ B. C. D. 解析:[解析] 对于选项A,n个元素进栈后,出栈顺序必然与进栈的顺序相反,因此选项A正确;对于选项B,如果某元素进栈后很快又出栈,则进栈和出栈操作可以多于n次;对于选项C,栈并未对进栈和出栈

数据结构第三章栈和队列3习题

第三章 栈和队列 试题 2. 当利用大小为 n 的数组顺序存储一个栈时,假定 用 首先应执行( )语句修改 top 指针。 A. top++ ; B. top -- ; top ==n 表示栈空,则向这个栈插入一个元素时, C. top = 0 A. 3, 2, 1 B. 2, 1, 3 C. 3, 1, 2 4. 在一个顺序存储的循环队列中,队头指针指向队头元素的( )位置。 A. 前一个 B. 后一个 C. 当前 D. 后面 5. 当利用大小为 n 的数组顺序存储一个队列时,该队列的最大长度为( )。 A. n-2 B. n-1 C. n D. n+1 6. 从一个顺序存储的循环队列中删除一个元素时,需要( )。 A. 队头指针加一 B. 队头指针减一 C. 取出队头指针所指的元素 D. 取出队尾指针所指的元素 一、单项选择题 1. 栈的插入和删除操作在( A. 栈顶 )进行。 B. 栈底 C. 任意位置 D. 指定位置 3. 若让元素 1,2,3 依次进栈,则出栈次序不可能出现 ( )种情况。 D. top D. 1, 3, 2 7. 假定一个顺序存储的循环队列的队头和队尾指针分别为 front 和 rear ,则判断队空的条件为 )。 A. front+1 == rear B. rear+1 == front C. front == 0 D. front == rear 8. 假定一个链式队列的队头和队尾指针分别为 A. front == rear C. rear != NULL front 和 rear ,则判断队空的条件为( )。 B. front != NULL D. front == NULL 9. 设链式栈中结点的结构为( data, link 个由 指针 s 所指的结点,则应执行操作( A. top->link = s ; C. s->link = top ; top = s ),且 top 是指向栈顶的指针。若想在链式栈的栈顶插入 一 )。 B. s->link = top->link ; top->link = s D. s->link = top ; top = top->link ; 10. 设 链式栈中结点的结构为 ( 并将被摘除结点的值保存到 data, link ),且 top x 中,则应执行操作( 是指向栈顶的指针。若想摘除链式栈的栈顶结点, )。 A. x = top->data ; top = top->link C. x = top ; top = top->link B. top = top->link D. x = top->data x = top->data 11. 设 循环队列的结构是 #define MaxSize 100 typedef int ElemType typedef struct {

数据结构:栈和队单元测验与答案

一、单选题 1、链栈与顺序栈相比有一个明显的优点,即_____。 A.插入操作更方便 B.删除操作更加方便 C.不会出现栈空的情况 D.通常不会出现栈满的情况 正确答案:D 2、设进栈序列是1,2,3,…,n,输出序列为p1,p2,p3,…,pn。若p1=3,则p2为_____。 A.可能是1 B.不可能是2 C.可能是2 D.必是1 正确答案:C 3、已知hs为首指针的简单单向链表存储一个栈,使指针s所指结点进栈的操作是____。 A.s->next=hs;hs=s; B.hs->next=s; C.s->next=hs->next; hs->next=s; D.s->next=hs;hs=hs->next; 正确答案:A

4、数组q[M](M等于6)存储一个循环队,first和last分别是首尾指针。已知first和last的当前值分别等于2和5,且q[5]存放的是队尾元素。当从队列中删除两个元素,再插入一个元素后,first和last的值分别等于_____。 A.3和6 B.5和1 C.4和0 D.1和3 正确答案:C 5、设进栈序列是1,2,3,…,n,输出序列为p1,p2,p3,…,pn。若p3=1,则p1为_____。 A.必定是3 B.必是2 C.不可能是3 D.可能是3 正确答案:D 6、数组q[M]存储一个循环队,first和last分别是首尾指针,如果使元素x进队操作的语句为“q[last]=x,last=(last+1)%m;”那么判断队满的条件是_____。 https://www.360docs.net/doc/2219353162.html,st= =M-1 https://www.360docs.net/doc/2219353162.html,st= =first C.(last+1)%m= =first https://www.360docs.net/doc/2219353162.html,st+1= =first

数据结构应用题答案2014-7-6

数据结构应用题答案 第2章线性表 1.设指针变量p指向双向链表中结点A,指针变量q指向被插入结点B,要求给出在结点A 的后面插入结点B的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。答:操作序列如下:q->rlink = p->rlink ; p->rlink = q ; q->rlink->llink = q ; q->llink = p ; 注意答案不唯一 第3章栈和队列 1.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。 答:共计14种,分别是:1234, 1243, 1324, 1342, 1432, 2134, 2143, 2341, 2314,2431, 3214, 3241, 3421, 4321 2.如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和1,3,5,4,2,6;请说明为什么不能或如何才能得到。 答:(1)不能得到4,3,5,6,1,2 ;因为1,2,3,4入栈后;4,3出栈;得到序列4,3;栈中还有1,2;5入栈后即出栈,得到序列4,3,5;6入栈后即出栈,得到序列4,3,5,6;此时,栈中还有1,2;必须2先出栈,然后1再出栈,1不可能在2之前出栈。故而得不到该序列。 (2)能得到输出顺序为1,3,5,4,2,6的序列。得到的操作如下:1入栈后即出栈,得到序列1;2,3入栈后3即出栈,得到序列1,3;4,5入栈后,5出栈,4出栈,得到序列1,3,5,4;2出栈,得到序列1,3,5,4,2;6入栈后即出栈,得到序列1,3,5,4,2,6。 3.假设正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文。假设一字符序列已存入计算机,请用堆栈判断其是否为回文,简述算法。 答:方法一:使用数据结构:循环队列和顺序栈。算法思路为: 1.将字符串按照用户输入的顺序分别入栈和队列 2.分别从队列和栈中取出首个字符 3.比较取出的字符,若相等,继续分别从队列和栈中取首个字符;否则跳出循环,并设置标志flag=0; 4.若队列和栈中的字符都取完,则结束,设置标志flag=1; 5.flag=1,表示字符从前往后和从后往前的序列完全匹配,该字符串属于回文 6.flag=0,表示字符从前往后和从后往前的序列不完全匹配,该字符串不属于回文 方法二:使用栈。将字符串的前一半入栈,再依次出栈,与后一半进行比较,若有不等则不是回文;若依次相等,则是回文。 注意:本题要求简答算法思路,并不要求写出具体算法。 4.试写出循环队列判空和判满的条件(队列最大容量为M)。 答:假设循环队列最大存储容量为M 判空:Q.front==Q.rear (1) 判满:(Q.rear+1)%M==Q.front (2) 评分标准:给出(1)和(2)式分别得3分,其他酌情扣分。 5.假设Q[0..10]是一个循环队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。 d,e,b,g,h入队;d,e出队;i,j,k,l,m入队;n,o,p入队 答:(图自己根据解答画出)d,e,b,g,h入队;状态1:front=0,rear=5;

数据结构练习题栈和队列

栈和队列 1 简述栈和线性表的区别。 2 简述栈和队列这两种数据结构的相同点和不同点。 3 如果进栈的元素序列为A,B,C,D,则可能得到的出栈序列有多少种?写出全部的可能序列。 4 如果进栈的元素序列为1,2,3,4,5,6,能否得到4,3,5,6,1,2和1,3,5,4,2,6的出栈序列?并说明为什么不能得到或如何得到。 5 写出下列程序段的运行结果(栈中的元素类型是char): main( ) { SEQSTACK s,*p; char x, y; p = &s; initstack(p); x = ′c′; y = ′k′; push(p,x); push(p,′a′); push(p,y); x = pop(p); push(p,′t′); push(p,x); x = pop(p); push(p,′s′);

while(!empty(p)) { y = pop(p); printf(″%c″,y);} printf(″%c\n″,x); } 6 将一个非负十进制整数转换成二进制数,用非递归算法和递归算法来实现。 7 写一算法将一顺序栈中的元素依次取出,并打印元素值。 8 设单链表中存放着n个字符,试编一算法,判断该字符串是否有中心对称关系,例如xyzzyx,xyzyx都算是中心对称的字符串。 9 写出下列程序段的运行结果(队列中的元素类型是char): main( ) { SEQQUEUE a, *q; char x, y; q = &a; x=′e′; y=′c′; initqueue(q); enqueue(q,′h′); enqueue(q,′r′); enqueue(q,y);

数据结构第三章栈和队列习题

03 栈和队列 【单选题】 1. 设入栈先后顺序为a,b,c,且在入栈过程中可出栈,则不可能得到的出栈序列是(B)。A、a,b,c B、c,a,b C、b,c,a D、b,a,c 2. 栈是一种(B)的线性表。 A、先进先出B、后进先出C、随意进出 3. 在一个可存放n个数据元素的顺序栈中,假设以高地址端为栈底,以top为栈顶指针,当向栈中压入一个数据元素时,top的变化是(D)。 A、不变B、top=n C、top++ D、top-- 4. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则删除一个结点的操作是(C)。 A、rear=front.next B、rear=rear.next C、front=front.next D、front=rear.next 5. 向一个栈顶指针为s且带头结点的链栈中插入一个p所指结点时,应执行(B)。A、s.next=p; B、p.next=s.next; s.next=p C、p.next=s; s=p; D、p.next=s; s=s.next; 6. 从一个栈顶指针为s且不带头结点的链栈中删除一个结点,用x保存被删结点的值,则执行(D)。 A、x=s; s=s.next; B、x=s.data; C、s=s.next; x=s.data; D、x=s.data; s=s.next; 7. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则插入p所指结点的操作是(B)。 A、front.next=p; front=p; B、rear.next=p; rear=p; C、p.next=rear; rear=p; D、p.next=front; front=p; 8. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若 p1=n,则pi为(C)。A、i B、n-i C、n-i+1 D、不确定 【计算题】 1. 设入栈序列a、b、c、d,且在入栈的过程中允许出栈,试写出所有不可能得到的出栈序列。参考答案: dabc、dacb、dbac、dbca、dcab、cadb、cabd、cdab、bdac、adbc。

数据结构:栈和队列期末单元测试与答案

一、单选题 1、经过以下栈运算后,x的值是()。 InitStack(s); Push(s,a); Push(s,b); Pop(s,x); GetTop(s,x); A.b B.0 C.1 D.a 正确答案:D 2、若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。 A.2,3,5,4,1 B.5,4,3,2,1 C.2,1,5,4,3 D.4,3,1,2,5 正确答案:D 3、若链栈采用无头结点的单链表存储,top指向栈顶。若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。 A.x=top->data;top=top->next; B.top=top->link;x=top-> next; C.x=top-> next; D.x=top;top=top-> next; 正确答案:A

4、数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。 A.n+r-f B.n+r-f)%n C.r-f D.(n+f-r)%n 正确答案:B 5、设有一个递归算法如下 int fact(int n) { //n大于等于0 if(n<=0) return 1; else return n*fact(n-1); } 则计算fact(n)需要调用该函数的次数为()。 A.n+2 B.n C.n-1 D.n+1 正确答案:D

6、栈在()中有所应用。 A.表达式求值 B.递归调用 C.其他三个选项 D.函数调用 正确答案:C 7、为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是()。 A.线性表 B.有序表 C.栈 D.队列 正确答案:D 8、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。 A.6 B.2 C.4 D.3 正确答案:D

数据结构第3章 栈与队列习题

数据结构第3章栈与队列习题 第3章栈与队列 一、单项选择题 1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。A.A B.B C.C D.D 2.经过以下栈运算后,x的值是。 InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x); A.a C.1 B.b D.0 3.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。A.push,pop,push,pop,push,pop C.push,push,pop,pop,push,pop B.push,push,push,pop,pop,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。A.A,B,C,D B.D,C,B,A C.A,C,D,B D.D,A,B,C 5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。A.edcba C.dceab B.decba D.abcde 6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。 A.i C.j-i+1 B.n-i D.不确定

7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若 p1=n,则pi的值。 A.i C.n-i+1 B.n-i D.不确定 8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,pn,若p1=3,则p2的值。 A.一定是2 B.一定是1 C.不可能是1 D.以上都不对 9.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若p3=1,则p1的值。 A.可能是2 C.不可能是2 B.一定是1 D.不可能是3 10.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若p3=3,则p1的值。 A.可能是2 C.不可能是1 B.一定是2 D.一定是1 11.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若pn=1,则pi(1≤i≤n-1)的值。 A.n-i+1 B.n-i C.i D.有多种可能 12.判定一个顺序栈S为空的条件为。 A.S.top= =S.base C.S.top!= S.base+S.stacksize A.S.top-S.base= =S.stacksize C.S.top- S.base!=S.stacksize B.S.top!= S.base D.S.top= = S.base+S.stacksize B.S.top= = S.base D.S.top!= S.base 13.判定一个顺序栈S为栈满的条件是。

数据结构(栈和队列)习题与答案

一、单选题 1、元素A、B、C、D依次进栈后,栈顶元素是 _______。 A.B B.D C.C D.A 正确答案:B 2、经过以下运算后, x的值是 _______。 InitStack (s); Push(s, a); Push(s, b); Pop(s, x); GetTop(s,x) A.0 B.b C.a D.1 正确答案:C 3、经过以下栈运算后,StackEmpty(s)的值是 _______。 InitStack (s); Push(s, a); Push(s, b); Pop(s, x); Pop(s,y) A.0 B.b C.a D.1 正确答案:D 4、已知一个栈的进栈序列是ABC,出栈序列为CBA,经过栈的操作是 _______。 A.push, push, push, pop, pop, pop B.push,pop,push, push,pop, pop C.push, push,pop, pop,push,pop D.push,pop,push,pop,push,pop 正确答案:A

5、若元素a、b、c、d、e、f依次进栈,允许进栈、退栈的操作交替进行,但不允许 连续3次退栈工作,则不可能得到的出栈序列是 _______。 A. bcaefd B.afedcb C.cbdaef D.dcebfa 正确答案:B 6、设一个栈的输入序列为A、B、C、D,则借助一个栈所得的输出序列不可能是 _______。 A.DCBA B.DABC C.ACDB D.ABCD 正确答案:B 7、一个栈的进栈序列是abcde,则栈的不可能的输出序列是 _______。 A.decba B.abcde C.dceab D.edcba 正确答案:C 8、已知一个栈的进栈序列是1,2,3,…n,其输出序列的第一个元素是i(1≤i≤n),则第j(1≤j≤n)个出栈元素是_______。 A.n-i B.j-i+1 C.i D.不确定 正确答案:D

数据结构栈练习题与答案

1、栈的“先进后出”特性是指()。 A.最后进栈的元素总是最先出栈 B.同时进行进栈和出栈操作时,总是进栈优先 C.每当有出栈操作时,总要先进行一次进栈操作 D.每次出栈的元素总是最先进栈的元素 正确答案:A 2、给定一个足够大的空栈,有 4 个元素的进栈次序为 A、B、C、D,则以C、D开头的出栈序列的个数为()。 A.1 B.2 C.3 D.4 正确答案:A 解析:若出栈序列为CD…,则A、B、C进栈,C出栈,D进栈,D出栈,此后只有B出栈和A出栈一种情况,所以这样的出栈序列只有 CDBA 一个。 3、若元素a、b、c、d、e、f依次进栈,允许进栈、退栈的操作交替进行,但不允许连续3次退栈工作,则不可能得到的出栈序列是()。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 正确答案:D 解析:选项A操作:a进,b进,c进,d进,d出,c出,e进,e 出,b出,f进,f出,a出。

选项B操作:a进,b进,c进,c出,b出,d进,d出,a出,e 进,e出,f进,f出。 选项C操作:a进,b进,b出,c进,c出,a出,d进,e进,e 出,f进,f出,d出。 选项D操作:a进,a出,b进,c进,d进,e进,f进,f出,e 出,d出,c出,b出。 从中看到,选项D中最后连续出栈5次,不符合要求。 4、一个栈的进栈序列是a、b、c、d、e,则栈的不可能的输出序列是()。 A.edcba B.decba C.dceab D.abcde 正确答案:C 解析:对于选项A,a、b、c、d、e进栈,e、d、c、b、a出栈; 对于选项B,a,b,c,d进栈,d出栈,e进栈,e出栈,c、b、a 依次出栈; 对于选项C,a、b、c、d进栈,d出栈,c出栈,e进栈,e出栈,此时栈中从栈底到栈顶为a、b,不可能a先出栈,所以C是不可能的输出序列; 对于选项D,a进栈,a出栈,b进栈,b出栈,c进栈,c出栈,d 进栈,d出栈,e进栈,e出栈。 5、当用一个数组data[0..n-1]存放栈中元素时,栈底最好()。 A.设置在data[0]处 B.设置在data[n-1]处

数据结构第3章栈与队列练习题

第三章栈和队列 一、选择题 1.以下不是栈的大体运算的是( ) A) 删除栈顶元素B) 删除栈底元素 C) 判定栈是不是为空D) 将栈置为空栈 2.假设进栈序列为1,2,3,4,进栈进程中能够出栈,那么以下不可能的一个出栈序列是( ) A) 1,4,3,2 B) 2,3,4,1 C) 3,1,4,2 D) 3,4,2,1 3.栈和队列的一起点( ) A) 都是先进先出 B) 都是后进先出 C) 只许诺在端点处插入和删除元素 D) 没有一起点 4.假设已知一个进栈序列是1,2,3,……,n,其输出序列是p1,p2,vp3,……pn, 假设p1=n, 那么pi(1top==1 B) ST->top==-1 C) ST->top!=MaxSize-1 D) ST->top==MaxSize-1 6.向一个栈指针为HS的链式栈中插入一个s所指的结点时,那么执行() A) HS->NEXT=S; B) S->NEXT=HS->NEXT;HS->NEXT=S; C) S->NEXT=HS;HS=S; D) =HS;HS=HS->NEXT; 7.在一个链式队列中.假设f和r别离为队头和队尾指针,那么插入s所指的结点运算是() A) f->next=s;f=s; B) r->next=s;r=s; C) s->next=s;r=s; D) s->next=f;f=s; 8.在一个链式队列中,假设f和r别离为队头和队尾指针,那么删除结点的运算是() A) r=f->next; B) r=r->next;

数据结构-进栈出栈和排序习题集

一、填空题:(每空1分,共10分) 1.数据的存储结构种类包括①。 2. 分析以下部分代码的时间复杂度用大O表示法为②。 int i=1;s=0; while(i<=n) { s+=i; i=i+2; } 3. 队列是一种③的特殊的线性表。 4. 线性表的顺序存储结构通常可采用④和⑤两种访问方式。 5. 设一棵完全二叉树有700个结点,则共有⑥个叶子结点。 6. 将一个长度为n的顺序表的第i个元素删除时,只需前移⑦个元素。 7. 设数组a[1…10, 1…20]的起始地址为100,每个元素占4个存储单元,若以行序为主序顺序存储,则元 素a[3,5]的存储地址为⑧。 8. 排序方法的稳定性是指⑨。 9. 对有序顺序表(3,8,10,25,29,45,55,77,85,99)采用折半查找,若查找表中元素10,它将 依次与表中元素⑩比较大小。 10. 数据的存储结构主要包括。 11. 表达式求值是应用的一个典型例子。 12. 下面程序段的时间复杂度是。 for(j=0; j<n;j++) a=a+ j; 13. 空串与空格串的区别在于:。 14. 单链表表示法的基本思想是用表示结点间的逻辑 15. 在图1所示的树中,结点G的子孙结点有。 16. 在有n个顶点的连通图中,至少有条边。 17. 根据二叉树的定义,具有三个结点的二叉树有种不同 的形态,分别是。 18. 排序方法的稳定性是指。 19. 设有一稠密图G,则G采用存储较省空间。 20. 将一个长度为n的顺序表的第i个元素(1≤i≤n)删除时,需向前移动个元素。 21. 设数组a[1…10, 1…20]的基地址为100,每个元素占4个存储单元,若以列序为主序顺序存储,则元素a[6,16]的存储地址为。 22. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。 23. 数据的逻辑结构包括、和三种基本结构。 24. 表达式求值是应用的一个典型例子。 25. 下面程序段的时间复杂度是。 i=1; while(i<=n) { t=t+1; i++; }

相关主题
相关文档
最新文档