数据结构2

功能受限的表 

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

    顺序栈 

        数据项 

            存储元素的内存首地址

            栈的容量

            栈顶位置

        运算 

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

        注意 

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

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

    链式栈 

        数据域 

            栈顶

            节点数量

        运算 

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

    

    栈的应用 

        1、函数的调用

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

        3、表达式的解析

栈的常见笔试面试题 

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

        1 2 3 4 5

        3 2 1 4 5(√)

        3 1 2 4 5(×)

    实现一个函数,判断序列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

            1、代价是空一个位置不能使用

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

            如何计算元素的数量:

                (rear-front+cal)%cal         cal: 容量

        

            链式队列:

                    由若干个节点组成的队列

                    数据项:

                        队头指针

                        队尾指针

                        节点数量

                    运算:

                        创建、销毁、队空、入队、出队、队头、队尾、数量

                

                队列的应用:

                    1、消息队列

                    2、树的层序遍历

                    3、图的广度优先遍历

                    4、封装线程池、数据池

                

                常见的笔试面试题:

                    使用两个栈来模拟一个队列的功能

                        从栈1到栈2 必须一个不留地入栈

                        如果栈2不空,栈1一定不能入栈2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值