数据结构与算法Day02

功能受限的表:

    栈:只有一个进出的出入口的表结构,先进后出,FILO

        顺序栈:

            数据项:

                存储元素的内存首地址

                栈的容量

                栈顶位置

            运算:

                创建、销毁、入栈、出栈、栈满、栈空、栈顶

        注意:  

            栈顶指向顶部的第一个数据,称为满增栈

            栈顶指向接下去要入栈的位置,称为空增栈

                                        满减栈、空减栈      

        链式栈:

            数据域:

                栈顶

                节点数量

            运算:

                创建、销毁、入栈、出栈、栈空、栈顶

        栈的应用:

            1、函数的调用(栈内存)

            2、生产者和消费者模型(栈作为仓库)

            3、表达式的解析 

        栈的常见笔试面试题:

            某个序列是入栈顺序,判断哪个序列为合理的出栈顺序

            1 2 3 4 5

            3 1 2 4 5 No

            1 2 3 4 5 yes

            练习:实现一个函数,判断序列b是不是序列a的出栈顺序

            bool is_popstack(int* a,int* b,int len)

            {

                //  创建一个栈

                //  按照a的顺序一个一个入栈

                    //  按照b的顺序出栈

                //  最后判断栈是否为空  

            }

            问题:两个栈如果使用能够让空间利用率最大化?


 

    队列:一个端口进,另一个端口出,先进先出 FIFO

        顺序队列:

            数据项:

                储存元素的内存首地址

                容量

                队头

                队尾    接下去要入队的位置

            运算:

                创建、销毁、入队、出队、队空、队满、队头、队尾、元素个数

        

        顺序队列是由一维数组+队头位置front+队尾位置rear组成,入队时rear+1,出队时front+1,为了能够让队列反复使用,我们要把一维数组想象成一个环,因此rear、front加1后要用队列的容量求余

            rear = (rear+1)%cal;

            front = (front+1)%cal;

        

            如何判断队空:  front == rear

            如何判断队满:  front == (rear+1)%cal

                1、代价是空一个位置不能使用(常考)

                2、添加一个数据项标记队列是空或者满(元素个数)

            如何计算元素的数量:

                (rear-front+cal)%cal

        链式队列: 



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值