0
点赞
收藏
分享

微信扫一扫

软考中级(软件设计)----数据结构之线性结构(顺序表、链表、栈、队列)


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
  • 软考中级(软件设计)----数据结构之线性结构(顺序表、链表、栈、队列)_数据_02

  • 题目如下,答案为:D
  • 软考中级(软件设计)----数据结构之线性结构(顺序表、链表、栈、队列)_数据结构_03

解析:这里需要注意的是进栈的过程中也可以出栈,比如,进1,然后出1,然后进2,3,然后出,3,然后再进4,5等等,因此这个题目中最后一个出栈的是不确定的

  • 题目如下,答案为:D
  • 软考中级(软件设计)----数据结构之线性结构(顺序表、链表、栈、队列)_数据结构_04

解析:这里其实是两个栈,因此这里需要满足e2在e1之前,e3在e3之前,因此D是对的

  • 题目如下,答案为:B
  • 软考中级(软件设计)----数据结构之线性结构(顺序表、链表、栈、队列)_循环队列_05

解析:这里有两个注意点,一是问的是队尾元素的指针,不是队尾指针,因此按照之前理论应该是(Q.,front+Q.size-1)%M,第二个注意点时加一个M再对M取余没有任何影响,因此答案为B


举报

相关推荐

0 条评论