1 线性结构
每个元素最多只有一个出度和一个入度,表现为一条线状,线性表按存储方式可分为顺序表和链表
2 线性表的存储结构
3 顺序存储与链式存储的对比
-
在空间方面,因为链表还需要存储指针,因此有空间浪费存在 -
在时间方面,当需要对元素进行破坏性操作(插入、删除)时,聊表效率更高,因为其只需要修改指针的指向即可,二顺序表因为地址是连续的,因此当删除或者插入一个元素后,后面的其他节点位置都需要变动 -
而当需要对元素及逆行不改变结果操作(读取),顺序表效率更高,因为其物理地址是连续的,如同数组一般,只需要按照索引号就可以快速定位,而链表需要从头开始,一个一个地查找下去
4 栈和队列
- 队列是先进先出,分队头和队尾
- 栈是先进后厨,只能栈顶进出
- 循环队列
- 设置循环队列Q的容量为MAXSIZE,初始队列时队列为空,且Q.rear和Q.front都等于0
- 元素入队时修改队尾指针,即令Q.rear=(Q.rear+1)MAXSIZE
- 元素出队时修改队头指针,即Q.front=(Q.front+1)%MAXSIZE
- 根据队列操作的定义,当出队操作导致队列变为空时,有Q.rearQ.front,若入队操作导致队满,则Q.rearQ.front
- 这里需要注意的是,队头Q.front永远指向第一元素,而队尾Q.rear永远指向最后一个元素的后一个元素,即指向的为最后一个元素后面的一个空元素
- 在队列空和队列满的情况下循环队列的队头、队尾指针指向的位置是相同的,此时仅仅根据Q.rear和Q.front之间的关系无法断定队列的状态,为了区别队列空和满的情况,可以采用两种处理方式,其一就是设置一个标志,以区别队头和队尾指针的值相同队列是空还是满,其二就是牺牲一个存储单元,约定“队列的队尾指针所指位置的下一个位置是队头指针时”表示队列满,而头、尾指针的值相同的时候表示空指针
考试真题
-
题目如下,答案为:A -
题目如下,答案为:D
解析:这里需要注意的是进栈的过程中也可以出栈,比如,进1,然后出1,然后进2,3,然后出,3,然后再进4,5等等,因此这个题目中最后一个出栈的是不确定的
- 题目如下,答案为:D
解析:这里其实是两个栈,因此这里需要满足e2在e1之前,e3在e3之前,因此D是对的
- 题目如下,答案为:B
解析:这里有两个注意点,一是问的是队尾元素的指针,不是队尾指针,因此按照之前理论应该是(Q.,front+Q.size-1)%M,第二个注意点时加一个M再对M取余没有任何影响,因此答案为B
|