嵌入式学习day20

栈和队列

1.概念:

  • 链表、栈和队列都是一种线性结构(一对一)
  • 栈和队列是一种特殊的表状结构
  • 栈只允许在栈顶位置入栈和出栈元素
  • 链表可以在任意位置插入和删除元素
  • 栈和队列只允许在指定位置插入和删除元素

2.栈:

        1.概念:

                1.先进后出,后进先出

                2.栈顶:允许入栈和出栈的一端称为栈顶

                3.栈底:不允许入栈和出栈的一端称为栈底

                4.入栈(压栈):将元素放入栈顶位置

                5.出栈(弹栈):将栈顶元素取出

                6.栈针:记录栈顶位置的标记

        2.分类:

                1.顺序栈:

                        1.增栈:栈的方向自低向高增长

                        2.减栈:栈的方向自高向低增长

                        3.空栈:栈针指向要入栈的位置

                        4.满栈:栈针指向栈顶元素的位置

                        5.常见的顺序栈:

                                1.空增栈

                                2.空减栈

                                3.满增栈

                                4.满减栈

                2.:

                        1.类型定义:

#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__

typedef int datatype;           //存放数据的类型
typedef struct node 
{
    datatype tmpdata;           //存放数据
    struct node *pnext;         //存放下一个节点的指针
}linknode;

#endif

                        2.顺序栈的创建:

                                申请存放标签的空间

                                申请存放数据的空间

                        3.顺序栈的销毁:

                                销毁存放数据的空间

                                销毁存放标签的空间

                        4.是否为空栈:

                                栈针为0即为空栈

                        5.是否为满栈

                                栈针与tlen相同即为满栈

                        6.压栈

                                将元素放入栈顶位置

                                栈针位置++

                        7.出栈

                                栈针位置--

                                将栈顶元素出栈

                3.链式栈

3.队列

        1.概念:

                先进先出,后进后出

                队头:出队的一端

                队尾:入队的一端

                入队:将元素放入队列末尾

                出队:将元素从队头中取出

        2.分类:

                1.循环队列

                        1.类型定义

                        2.循环队列创建

                        3.循环队列销毁

                        4.判断循环队列是否为空

                        5.判断循环队列是否为满

                                为避免循环队列空与满的条件冲突,牺牲一个存放数据的空间,将tail+1==head作为判断队满的条件

                                循环队列如果head或者tail下标超过tlen范围,需要对tlen取余,保障head和tail的值在队列下标范围内变化

                        6.入队

                        7.出队

                2.链式队列

                        

                 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值