📖专栏文章:数据结构学习笔记
🪪作者主页:格乐斯
前言
线性表习题 |顺序表 |链表 |栈和队列
顺序表和链表
1、
选B
100+2(5-1)=108*
第i个元素地址X,元素长度Len,第j个元素地址Y
公式:Y=X+Len(j-i)*
2、
选A
对顺序表操作的算法时间复杂度是O(1)的只有访问任意结点,插入删除排序都是大于等于O(N)
3、
选B
顺序表总共127个元素,在最后一个元素之后插入需移动0次,在最后一个元素插入移动1次,倒数第二个元素插入移动2次,依次类推,在首元素插入移动127次
(0+1+…+127)/128=63.5
*公式:((0+n)n/(n+1)=n^2/(n+1)
4、
选A
链式存储结构所占存储空间,一部分存放结点值,另一部分存放与其他结点有关系的指针
5、
选D
链式结构的存储单元地址连续或不连续都可以
6、
选B
链式结构的对单个元素插入删除操作的时间复杂度是最小的O(1)
顺序结构的则是O(N)
7、
选C
存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比。
假设链表一个结点的数据域占空间为D,指针域占的空间为N,则存储密度为D/(D+N),一定是小于1的。
8、
选A
两个各有n个元素的有序表,如果第一个有序表的所有元素都小于第二个表中元素,那么第二个表的元素依次与第一个表的元素比较,只需要比较n次
9、
选B
长度为n的顺序表中,第i个元素之前插入新元素需要向后移动n-i+1个元素
就相当于问 3到10有几个数字,答案无疑是10-3+1=8个
10、
选D
链表中首元素和尾元素没有直接前驱和直接后驱,除此之外都有前驱后驱且仅有一对
线性表的结点可以没有元素
11、
选C
在链表末尾插入1个新结点需要先找到末尾结点,时间复杂度O(N)
若创建一个包含n个结点的单链表也就是末尾插入n个结点,则时间复杂度为O(N^2)
12、
选D
链式结构和顺序结构各有优缺点,不存在一种结构优于另一种结构的说法
13、
选D
链表结点后插法:先 新结点连接原结点,后 定位结点连接新结点
14、
选A
单链表结点插入操作
15、
选C
双链表结点插入操作
栈和队列
1、
选C
模拟选项的出栈方式来判断选项
2、
选C
从n往前数i个数,问数到第i个数是多少
n-i+1 (+1是因为本身也算数)
比如从10数到1,第三个数是10-3+1=8
3、
选D
计算循环队列的元素个数,也就是求队列长度
假设n表示队列最大容量,r表示队尾元素的位置,f表示头元素前一位置,则元素个数为 (n+r-f)%n
4、
选A
保存栈顶元素值并删除栈顶结点:x=top->data; top=top->link;
5、
选A
条件n等于0时停止递进,0到n有n+1个数,所以函数调用次数为n+1次
6、
选D
栈的特性是后进先出
7、
选A
解决缓冲区问题应利用一种先进先出的线性表
8、
选B
e2在e1前出栈,说明栈S至少两个元素;
像e4e3、e6e5这种降序元素组合在下文称作 “以某元素开头的降序组”;
降序组的最大长度为2,所以栈元素最大数量至少为2;
题目中以元素e4开头的降序组 排在 以元素e6开头的降序组之后,所以栈存在元素的最大数量不会增加;
但是如果反过来e6在e4前,最大数量就会增加2;
e1在降序组之后出栈,所以最大数量加1;
至此栈S的元素最大数量为3。
9、
选C
初始栈顶指针top为n+1,故元素从高地址进栈;
top的运算从原先的++变–
10、
选D
表达式求值采用后进先出的线性表,就是栈
11、
选D
当队列中只有一个元素的时候,删除结点需要同时修改头尾指针
12、
选D
循环队列入队操作rear指针的运算语句:rear=(rear+1)%MAXSIZE
数组A[0…m]总共有m+1个元素,所以入队操作为
rear=(rear+1)%(m+1);
13、
选B
循环队列判断队空:rear==front
14、
选C
栈和队列的共同点是 只允许在端点处插入和删除元素
15、
选B
递归算法必要部分包括 终止条件和递归部分
总结
本文主要介绍了15道线性表习题 包括顺序表 、链表 、栈和队列
文章到这结束啦,感谢阅读~
如果文章的论述或代码等出现错误,欢迎前来指正!
如果你觉得文章写的还不错,记得点赞收藏评论三连~ ❤