前言
为提升和巩固个人现有知识水平,选择牛客网的选择题进行练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢!
栈
序列
- 【问】若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()
A.41
B.42
C.43
D.44
卡特兰数公式:C(n,2n)/(n+1)
- 【答】若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()
A.41
B.42
C.43
D.44 - 【问】如下C++程序
int i=0x22222222;
char szTest[]=”aaaa”; //a的ascii码为0x61
func(I, szTest); //函数原型为void func(int a,char *sz);
请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据—)
A | 0x0013FCF0 0x0013FCF4 0x0013FCF8 | 0x61616161 0x22222222 0x00000000 |
---|---|---|
B | 0x0013FCF0 0x0013FCF4 0x0013FCF8 | 0x22222222 0x0013FCF8 0x61616161 |
C | 0x0013FCF0 0x0013FCF4 0x0013FCF8 | 0x22222222 0x61616161 0x00000000 |
D | 0x0013FCF0 0x0013FCF4 0x0013FCF8 | 0x0013FCF8 0x22222222 0x61616161 |
摘自 牛客网评论
- 对于x86,栈的增长方向是从大地址到小地址
- 对于函数调用,参数的入栈顺序是从右向左
- 函数调用入栈顺序是 右边参数–>左边参数–>函数返回地址
即:szTest ——> I——> func 依次入栈,地址由高到低
Var func I szTest Addr 0x0013FCF0 0x0013FCF4 0x0013FCF8
(函数首地址)Value 0x0013FCF8 0x22222222 0x61616161
- 【问】在向1988个有序顺序表中插入一个新元素,并保持原来的顺序不变,平均要移动的元素次数是?
A.992
B.993
C.994
D.995
3. 【答】在向1988个有序顺序表中插入一个新元素,并保持原来的顺序不变,平均要移动的元素次数是?
A.992
B.993
C.994
D.995
内存存储
- 【问】以下哪个 不是分配在栈上 的?
A.函数内局部变量
B.函数内局部指针变量
C.函数内动态申请的对象
D.函数内指向动态申请的对象的局部指针变量
摘自 牛客网评论
内存存储分为 栈 和 堆
栈:简单类型变量储存(包括指向对象的内存地址储存)
堆:复杂类型变量储存(e.g.对象的内容储存)
数据类型分为 简单数据类型 和 复杂数据类型
简单变量:string,number,boolean,undefined,null等
复杂变量:对象
- 【答】以下哪个 不是分配在栈上 的?
A.函数内局部变量
B.函数内局部指针变量
C.函数内动态申请的对象
D.函数内指向动态申请的对象的局部指针变量
存储结构
- 【问】栈也是一种线性表,也同样有顺序存储结构和链式存储结构,这种说法()
摘自 牛客网评论
栈是限定 仅在表尾进行插入和删除操作的线性表;
线性表有顺序储存和链式储存,同样适用于栈;
- 【问】栈也是一种线性表,也同样有顺序存储结构和链式存储结构,这种说法(正确)
栈模拟队列
- 【问】用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
A.O+P
B.2O+1
C.2P+1
D.2O-1
摘自 牛客网评论
评论中作者的表述言简意赅
- 【问】用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
A.O+P
B.2O+1
C.2P+1
D.2O-1
无归类
- 【问】下面的一些说法哪些是正确的:( )
A. 缓存策略中基于LRU的淘汰策略,在缓存满时,会把最近进入缓存的数据先淘汰,以保持高的命中率
B. 中缀表达式A+(B+C)*D 的后缀表但式为:ABC+D*+
C. 堆栈是一种LIFO的数据结构
D. 高级语言通过编译或者即时编译(JIT)后成为汇编语言被机器装载执行
E. TCP协议和UDP协议都在IP协议之上,TCP是面向连接的,UDP是面向非连接的,但无论TCP还是UDP建立通信都需要一次握手,以确保对方的端口已经打开
F. 现代的操作系统一般都分为用户态和内核态,用户态和内核态的切换是经常发生的,程序员不需要对内核态和用户态的切换进行编程关注
摘自 牛客网评论
A: LRU的过程如下(访问的频率越高越不该丢弃):
1. 新数据插入到链表头部;
2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
3. 当链表满的时候,将链表尾部的数据丢弃。
B: 有种简单的方法:
1. 先将中缀表达式加括号:(A + ((B + C) * D));
2. 再把运算符移到括号后面(前缀移到前面):(A ((B C)+ D)*)+;
3. 把括号去掉:ABC+D*+。
C: LIFO:Last In First Out(后进先出)。
D: 汇编语言也并不能被机器执行,机器可以执行的是二进制的机器语言。
E: TCP建立通信需要三次握手,而UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。
F: 这个读起来就不像对的…程序员是可以通过调用fork()函数的方式进行切换的。
- 【答】下面的一些说法哪些是正确的:( )
A. 缓存策略中基于LRU的淘汰策略,在缓存满时,会把最近进入缓存的数据先淘汰,以保持高的命中率
B. 中缀表达式A+(B+C)*D 的后缀表但式为:ABC+D*+
C. 堆栈是一种LIFO的数据结构
D. 高级语言通过编译或者即时编译(JIT)后成为汇编语言被机器装载执行
E. TCP协议和UDP协议都在IP协议之上,TCP是面向连接的,UDP是面向非连接的,但无论TCP还是UDP建立通信都需要一次握手,以确保对方的端口已经打开
F. 现代的操作系统一般都分为用户态和内核态,用户态和内核态的切换是经常发生的,程序员不需要对内核态和用户态的切换进行编程关注
曾经数据结构学的很透,不常看,就,就忘了呀,sincerely,end.
红
橘
蓝