栈与队列的小结

栈的学习总结

栈的逻辑结构:线性结构→受限线性表

栈的基本操作(来自王道)

栈的数学性质!卡特兰数。

一、顺序栈

顺序栈的存储结构:顺序存储。逻辑地址相邻的数据元素在内存地址上也相邻

注意:

1.1)完成初始化后,关注指针top初始化的两种常见值:-1和0.

=-1即栈顶指针始终指向栈顶(已存储数据)的内存空间【王道】

=0即栈顶指针始终指向栈顶的下一个(未存储数据)的内存空间【严慧敏】

1.2)++i和i++的区别:

++i:先+1,再赋值

i++:先赋值,再+1(同时会需要一个临时的变量来转存)

共享栈:两个栈共享一片连续的内存空间。两个栈顶指针分别指向两端,一段入栈时+,另一端入栈时-。

二、链栈

存储结构:链式存储

运算:创、增、删、改、查、判空/判满

            判满不需要。

            可以不用头结点。

三、共享栈

逻辑结构:线性结构→受限线性表

存储结构:顺序存储

运算:…创、增、删、改、查、判空/判满

创建时,须有2个栈顶指针对应共享栈中的两个顺序栈。

队列的学习总结

队列的逻辑结构:线性结构→受限线性表

队列的基本操作(来自王道)

    特点:先入先出。头(队头,front)删尾(队尾,rear)插

一、存储结构为顺序存储的队列

1.顺序存储结构描述:(用循环队列表示)


//循环队列的存储结构 == 和队列一致
typedef struct
{
    int data[SqQuMaxsize];
    int SqQufront, SqQufront;  //front队首出队指向待出队元素, rear队尾入队指向待入队元素的下一个空位置
}SqQueue;

2.注意:

//初始时,SqQufront = SqQufront = 0; 在初始化函数中有
//队满条件:(Q.SqQurear+1)%SqQuMaxsize == Q.SqQufront
//队空条件:Q.SqQurear == Q.SqQufront
//当前队列长度 = (Q,SqQurear - Q.SqQufront + SqQuMaxsize)%SqQuMaxsize; 因为循环队列,可能rear-front是负数,所以要+一个max。并且取模处理

二、存储结构为链式存储的队列

1.链式存储结构描述:

//链队列的存储结构
typedef struct LinkNode
{
    int data;
    struct LinkNode *next;
}LinkNode;//定义一个结点

typedef struct
{
    LinkNode *lifront, *lirear;
}LinkQuene;//定义队头队尾的指针变量

2.注意:

2.1实质是一个同时带有队头指针和队尾指针的单链表。

2.2通常会设置头结点,便于操作。

三、双端队列

定义:是指允许两端都可以进行入队和出队操作的队列。两端分称为前端和后端

·那么:只有一段进行插入/删除 == 栈;一端只能输入,另一端只能输出 == 队列

定义:双端队列能够同时插入和删除的一段称为前端。

定义:前端进队的元素始终排列在后端进队的元素的前面。

             也就意味着,前端进入的元素和后端进入的元素是有一堵墙相隔开的。按1、2、3、4顺序分别进队,前端进124,后端进3。那么从后端往前端看,就是3、1、2、4。

定义:出队不看前端或后端,先出的元素始终排列在后出的元素前面。

理解上述定义,基本就能做题了。

四、队列在计算机中的应用

1. 主机与外设之间速度不匹配问题

2. 多用户引起的资源竞争问题

3. 图的层序遍历、广度优先遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值