【数据结构】线性结构:栈&队列&数组

栈和队列是插入、删除受限制(只能在表的一端插入、删除,不能从中间插入、删除)的线性表。

它们的存储结构,以及存储结构下不同操作的属性和普通线性表是一样的。因为受限制,理解起来反而更简单。

栈(LIFO—Last In First Out)是后进先出的线性表,采用顺序存储时,称顺序栈;采用链式存储时,称链栈。

允许插入和删除的称为栈顶;另一端称为栈底。空栈出栈称“下溢”,满栈入栈称“上溢”。


顺序栈的进栈操作:1、栈顶下标值加1;2、栈顶赋值。

顺序栈的出栈操作:1、栈顶下标值减1。

顺序栈的取栈顶元素操作:按下标值直接取,时间复杂度为O(1)(顺序表也是直接取O(1))。


链栈的进栈操作(前插):1、新增结点指向后继结点;2、头结点指向新增结点。【栈只能在栈顶进行操作,因此只能用前插算法,删除操作类似。】

链栈的出栈操作:1、取出栈顶元素;2、头结点指向原栈顶的下一个结点;3、释放原栈顶元素。

链栈的取栈顶元素操作:根据指针走向直接取(相当于单链表定位算法中的最优情况——取首结点),时间复杂度为O(1)。




队列(FIFO—First In First Out)是先进先出的线性表,采用顺序存储时,称顺序队列;采用链式存储时,称链队列。


顺序队列因为操作在表的两头,首指针front,尾指针rear。往往用循环队列解决“假溢出”,因此顺序队列常用循环队列。

循环队列因为是环状的,通常用取余操作确定存储位置。


无论循环队列空还是满都有front=rear,因此一般设置队列元素只剩下一个单元(.rear+1)是认为队满。


循环队列的入队列操作:1、rear值加1;2、新增结点赋值。【入队列都是从队尾处入,出队列都是从队首处出。】

循环队列的出队列操作:1、front值加1。

循环队列的取队列首元素:1、取当前front+1的值。


链队列是动态申请空间,不会出现队列满的情况,front=rear时,队列为空。


链队列的入队列操作:1、原尾结点指向新增结点;2、重置队列rear。

链队列的出队列操作:1、取出原首结点;2、头结点指针指向新首结点;3、释放原首结点。

链队列的取队列首元素:直接取当前首结点值。


数组是线性表的一种推广,其规律也符合一般线性表的规律。在类C语言的编译程序中,数组采用的是以行为主序的存储方法,也有以列为主序的存储方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值