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

【原文链接】

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值