数据结构笔试题记录

数据结构

数组

对数组的正确引用:
int a[10],*p=a;
*(p+2)
C语言中字符串默认’\0’占用一个字节,char,short,int分别占1,2,3字节
Java的char是unicode编码,可以放汉字,一些特殊汉字除外。因此char两字节

1.初始化正确的
A.int a[10]=(0,0,0,0)
B.int a[10]={}
C.int a[]={}
D.int a[10]={10*a}

a:小括号改大括号
b:可,每个元素为0
c:数组长为1,元素为0
d:数组定义不能递归

2.便于插入和删除的容器是
A.list
B.vector
C.map
D.set

a:list底层是双向链表
b:vector底层结构为数组,支持快速访问
c:map底层数据结构为红黑树,除了hashmap无序,其他实现结构有序,不重复
d:set底层结构为红黑树,除了hashset,其他结构实现有序,不重复

3.以下代码那个可以输出good

	char a[]="ggood";
	char b[]="goodd";
	char *c;

A.c=a+1;
B.c=b;c[5]=‘/0’;
C.*c=“good”;
D.编译出错

A ,若B为c[4]也可

4.若数组S[1…n]作为两个栈S1和S2的存储空间,对任何一个栈,只有当[1…n]全满时才不能进行入栈操作,则这两个栈的最佳分配方案为
A.S1的栈底位置为0,S2的占地位置为n+1
B.S1的栈底位置为0,S2的栈底位置为n/2
C.S1的栈底位置为1,S2的栈底位置为n
D.S1的栈底位置为1,S2的栈底位置为1

两个试管相扣C

5.声明一个指向含有10个元素的数组指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int,正确的是*
A.(int *p[10])(int*)
B.int [10]*p(int*)
C.int(*(*p)[10])(int*)
D.int((int*)[10])*p

随便一个数组指针,`int(*p)[10]`,然后每个元素是一个函数指针, 函数指针`int(*pf)(int*)`,然后把`(*p)[10]`作为一个整体代替pf 可以得到`int(*(*p)[10])(int*)`

6.在一个有8个int数据的数组中,随机给出数组的数据找出最大的和第二大元素一定要进行几次比较
对于选择问题,找最大问题的下界是n-1
找第二大问题的下界是 n+logn-2

7.正确的是
A.顺序存储结构的存储一定是连续的,链式存储的存储结构不一定是连续的。
B.顺序存储只针对线性结构,链式存储只针对非线性结构。
C.顺序存储结构能存储有序表,链式存储结构不能存储有序表。
D.链式存储结构比顺序存储结构节省存储空间。

链式存储结构既可以针对线性结构也可以针对非线性结构,所以BC错误。链式存储结构中每个节点都由数据域与指针域两个部分组成,增加了存储空间,所以D错误。

8.数组定义int a[4][5],引用*(a+1)+2表示
A.a[1][0] +2
B.a数组第一行第二列元素的地址
C.a[0][1] +2
D.a数组第一行第二列元素的值

a是个行指针,a+1后指向下一行,`*(a+1)`后变成一个列指针,再+2仍为列指针,指向第一行第二列的元素,选B

9.设数组A[i,j],数组的每个元素长度为3字节,i从1到8,j从1到10,数组从内存首地址BA开始存放,当用列为主存放时,元素A[5][8]的存储首地址为
A.BA+180
B.BA+225
C.BA+222
D.BA+141

A
10.设数组A=array[1…100,1…100]以行为主序存储,每个元素占2个存储单元,基地址为10,LOC[5][5]应为
A.1020
B.1010
C.818
D.808

C

1.关于栈的说法错误的是
A.在栈空的情况下,一定不能出栈,否则会溢出
B.栈一定是顺序存储的线性结构
C.空栈是所有元素都为0的栈
D.一个栈输入为ABCD,可以得到输出:CABD

逻辑结构:线性(串、链式存储栈、顺序存储栈)、树形、图形 存储结构:顺序存储(数组--随机存取)、链式存储(链表--顺序存取)、索引存储(线索树)、散列存储(栈) `` ~~BCD~~ ``

2.关于栈和堆,错误的是
A.申请方式不同,堆是系统自动分配,栈是自己申请
B.栈的大小是固定的,堆的大小受限于系统有效的虚拟内存
C.栈的空间由系统决定何时释放,堆需要自己决定何时释放
D.堆的使用容易产生碎片,但是用起来最方便

堆:自己做饭自己吃,什么时候收盘子自己知道,但可能产生浪费(碎片) 栈:食堂,吃饭由工作人员打饭和分配位置,吃完了工作人员帮收盘子,没有浪费,碎片拿去喂猪 `` ~~A~~ ``

##机器学习
1.线性回归正确的是
A.基本假设包括随机干扰项为0,方差为1的标准正态分布
B.基本假设包括随机干扰项为0,同方差的正态分布
C.在违背基本假设时,普通最小二乘法估计量不再是最佳线性无偏估计量
D.在违背基本假设时,模型不再可以被估计
E.可以使用DW检验残差是否存在序列相关性
F.多重共线性会是的参数估计值方差减少

随机误差项是一个期望为0的随机变量 对解释变量的所有观测值,随机误差项由相同的方差 随机误差项彼此不相关 随机误差项服从正态分布 栈:食堂,吃饭由工作人员打饭和分配位置,吃完了工作人员帮收盘子,没有浪费,碎片拿去喂猪 `` ~~BCE~~ ``
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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),要求:交换元素不能用临时变量,如果有序需要最优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值