数据结构笔试题---栈

1、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6一次压入栈S,一个元素出栈后即进入队列Q,若出队列的顺序为e2、e4、e3、e6、e5、e1,则栈S的容量要求最小值为(B)

A、2      B、3C、4D、5

解析:

2、如果进栈序列为e1、e2、e3、e4,则不可能的出栈序列是(D)

A、e2,e3, e4, e1

B、e4,e3,e2,e1

C、e1,e2,e3,e4

D、e3,e1,e4,e2

解析:对于这种题,不用一个一个验证,越往后的输出在前面,则其后面的必定倒序输出,否则为不可能。如e3,e2,e1,e4,e3后面的一定是e2,e1这样的排,否则必不可能,如e3,e1,e2,e4。由于D中出现e3,e1,e2,违反了规则,因此是不可能出现的.


3、4个圆盘的Hanoi塔,总的移动次数为(C)

A、7

B、8 

C、15

D、16

解析:设F(N)为N个圆盘的hanoi塔总的移动次数,其递推方程为F(n)=f(n-1)+1+f(n-1)=2*f(n-1)+1。即先把上面(n-1)个圆盘移到第二个柱子上,再把最后一个圆盘移到第三个柱子,再把第二个柱子上的圆盘移动到第三个柱子上。而f(1)=1;于是可以推出f(n)=2^n-1(n表示移动次数,k表示盘子的数量)

4、若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列(B)

A、41

B、42

C、43

D、44

解析:result = C(2n,n)/(n+1),C(2n,n)是排列组合,下面的数是2n,上面的是n,具体请搜Catalan数

5、某表达式的前缀形式为"+-*^ABCD/E/F+GH",它的中缀形式为(C)

  • A^B*C-D+E/F/G+H
  • A^B*(C-D)+(E/F)/G+H
  • A^B*C-D+E/(F/(G+H))
  • A^B*(C-D)+E/(F/(G+H))
解析:
首先找到前两个操作数,在这里是AB,取离它最近的那个符号是^,组合起来,作为一项,这样表达式变成 + - * (A ^ B) C D / E / F + G H
继续这样,前两个操作数是(A ^ B)和C,符号是*,合并作为一项,变成 + - (A ^ B * C) D / E / F + G H

继续,变成 + (A ^ B * C - D) / E / F + GH

这个时候,+的一个操作数是(A ^ B * C - D),另一个操作数是第一个/后边的结果,

然后看怎么解 / E / F + GH,还是这样,被除数是E,除数是 / F + GH/ F + GH的被除数是F,除数是 + G H, 即为(G + H), 这项是F / (G + H),

回到上一步,/ E / F + G H是E / (F / (G + H)),再往上回一步,得到整个表达式: (A ^ B * C - D) + E / (F / (G + H))

6、若栈采用顺序存储方式存储,现两栈共享空间v[1…m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(B)

  • |top[2]-top[1]|=0
  • top[1]+1=top[2]
  • top[1]+top[2]=m
  • top[1]=top[2]
解析:当栈1的顶与栈2的相邻时,刚好为top[1]+1=top[2],若top[1]=top[2],则有一个元素会被覆盖。

1. 把一个链表反向,递归,非递归都写一遍。 1.试编写3个函数实现   (1)建立一个双向链表   (2)插入一个节点   (3)删除一个节点 2.自己定义数据结构,写出程序:二叉树的前序遍历。 3.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 4.下面哪排序法对12354最快 a quick sort b.buble sort c.merge sort 5.哪结构,平均来讲,获取一个值最快 a. binary tree b. hash table c. stack 6.一个二叉树的三遍历方法的输出结果 7.链表按升序打印每打印完一个节点就将该节点从链表中删除 8.选择一算法来整理出一个链接表。你为什么要选择这方法?现在用o(n)时间来做。 9. 用一算法在一个循环的链接表里插入一个节点,但不得穿越链接表。    10.给两个变量,如何找出一个带环单链表中是什么地方出现环的? 11.哈希表和数组的定义,区别,优缺点。 12.链接表和数组之间的区别是什么? 任选一门语言,当场定义二叉排序树数据结构,写出两个函数:初始化,删除一个节点,20分钟 13. 递归的折半查找算法[不限语言] 14. 解释一下什么是B+树,如何实现B+树的查找和插入.(用图示) 15.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 13.排序方法比较 (intel) 排序方法 平均时间 最坏时间 辅助存储 直接插入排序 O(N2) O(N2) O(1) 起泡排序 O(N2) O(N2) O(1) 快速排序 O(Nlog2N) O(N2) O(Nlog2N) 简单选择排序 O(N2) O(N2) O(1) 堆排序 O(Nlog2N) O(Nlog2N) O(1) 归并排序 O(Nlog2N) O(Nlog2N) O(n) 基数排序 O(d(n+radix)) O(d(n+radix)) O(radix) 17.一个链表的操作,注意代码的健壮和安全性。要求: (1)增加一个元素; (2)获得头元素; (3)弹出头元素(获得值并删除)。 18.内排序算法 19.折半查找的复杂度,证明 20.sizeof()和strlen()的使用. 21.顺序存储结构的优点,散列法的思想是什么? 22.汉罗塔算法,不能递归... 23.一个链表的结点结构 struct Node { int data ; Node *next ; }; typedef struct Node Node ; (1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) (2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表 依然有序。 (3)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表 依然有序,这次要求用递归方法进行。 ( Autodesk) 24.编最优化Bubble(int *pIntArray,int L),要求:交换元素不能用临时变量,如果有序需要最优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值