数据结构专场(持续输出)


前言

  为提升和巩固个人现有知识水平,选择牛客网的选择题进行练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢


序列

  1. 【问】若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()
      A.41
      B.42
      C.43
      D.44

卡特兰数公式:C(n,2n)/(n+1)

  1. 【答】若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()
      A.41
      B.42
      C.43
      D.44
  2. 【问】如下C++程序
int i=0x22222222char szTest[]=”aaaa”;  //a的ascii码为0x61 
func(I, szTest);    //函数原型为void func(int a,char *sz); 

  请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据—)

A0x0013FCF0
0x0013FCF4
0x0013FCF8
0x61616161
0x22222222
0x00000000
B0x0013FCF0
0x0013FCF4
0x0013FCF8
0x22222222
0x0013FCF8
0x61616161
C0x0013FCF0
0x0013FCF4
0x0013FCF8
0x22222222
0x61616161
0x00000000
D0x0013FCF0
0x0013FCF4
0x0013FCF8
0x0013FCF8
0x22222222
0x61616161

摘自 牛客网评论

  1. 对于x86,栈的增长方向是从大地址到小地址
  2. 对于函数调用,参数的入栈顺序是从右向左
  3. 函数调用入栈顺序是 右边参数–>左边参数–>函数返回地址
    即:szTest ——> I——> func 依次入栈,地址由高到低
VarfuncIszTest
Addr0x0013FCF00x0013FCF40x0013FCF8
(函数首地址)
Value0x0013FCF80x222222220x61616161
  1. 【问】在向1988个有序顺序表中插入一个新元素,并保持原来的顺序不变,平均要移动的元素次数是?
      A.992
      B.993
      C.994
      D.995

在这里插入图片描述
3. 【答】在向1988个有序顺序表中插入一个新元素,并保持原来的顺序不变,平均要移动的元素次数是?
  A.992
  B.993
  C.994
  D.995

内存存储

  1. 【问】以下哪个 不是分配在栈上 的?
      A.函数内局部变量
      B.函数内局部指针变量
      C.函数内动态申请的对象
      D.函数内指向动态申请的对象的局部指针变量

摘自 牛客网评论


内存存储分为
栈:简单类型变量储存(包括指向对象的内存地址储存)
堆:复杂类型变量储存(e.g.对象的内容储存)


数据类型分为 简单数据类型复杂数据类型
简单变量:string,number,boolean,undefined,null等
复杂变量:对象

  1. 【答】以下哪个 不是分配在栈上 的?
      A.函数内局部变量
      B.函数内局部指针变量
      C.函数内动态申请的对象
      D.函数内指向动态申请的对象的局部指针变量

存储结构

  1. 【问】栈也是一种线性表,也同样有顺序存储结构和链式存储结构,这种说法()

摘自 牛客网评论


栈是限定 仅在表尾进行插入和删除操作的线性表;
线性表有顺序储存和链式储存,同样适用于栈;

  1. 【问】栈也是一种线性表,也同样有顺序存储结构和链式存储结构,这种说法(正确

栈模拟队列

  1. 【问】用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
      A.O+P
      B.2O+1
      C.2P+1
      D.2O-1

摘自 牛客网评论


评论中作者的表述言简意赅在这里插入图片描述

  1. 【问】用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
      A.O+P
      B.2O+1
      C.2P+1
      D.2O-1

无归类

  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()函数的方式进行切换的。

  1. 【答】下面的一些说法哪些是正确的:( )
      A. 缓存策略中基于LRU的淘汰策略,在缓存满时,会把最近进入缓存的数据先淘汰,以保持高的命中率
      B. 中缀表达式A+(B+C)*D 的后缀表但式为:ABC+D*+
      C. 堆栈是一种LIFO的数据结构

      D. 高级语言通过编译或者即时编译(JIT)后成为汇编语言被机器装载执行
      E. TCP协议和UDP协议都在IP协议之上,TCP是面向连接的,UDP是面向非连接的,但无论TCP还是UDP建立通信都需要一次握手,以确保对方的端口已经打开
      F. 现代的操作系统一般都分为用户态和内核态,用户态和内核态的切换是经常发生的,程序员不需要对内核态和用户态的切换进行编程关注
曾经数据结构学的很透,不常看,就,就忘了呀,sincerely,end.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值