算法开启队列转栈武魂

简介: 算法开启队列转栈武魂

文章目录


队列接口见 算法开启小码农队列血脉

用队列实现栈

题目

image.png


栈结构体

typedef struct {
    Queue q1;
    Queue q2;//两个队列
} MyStack;


栈初始化

MyStack* myStackCreate() {
    MyStack* st = (MyStack*)malloc(sizeof(MyStack));
    QueueInit(&st->q1);
    QueueInit(&st->q2);
    return st;
}


入“栈”

image.png

void myStackPush(MyStack* obj, int x) {
    if(!QueueErase(&obj->q1))
    {
        QueuePush(&obj->q1,x);
    }
    else//两个都为空时push给q2
    {
        QueuePush(&obj->q2,x);
    }
}


出“栈”并取栈顶元素

3.gif

int myStackPop(MyStack* obj) {
    Queue* emptyQ = &obj->q1;
    Queue* nonemptyQ = &obj->q2;//假设q2空,q1非空
    //不是我们就互换位置
    if(!QueueErase(emptyQ))
    {
        nonemptyQ = &obj->q1;
        emptyQ = &obj->q2;
    }
    //非空队长大于一时朝空队里面挪动数据
    while(QueueSize(nonemptyQ)>1)
    {
        //把非队空的对头数拿出push给对空的
        QueuePush(emptyQ,QueueFront(nonemptyQ));
        //然后把非队空的对头数pop掉
        QueuePop(nonemptyQ);
    }
    //因为要返回栈顶数据所以存完再pop
    int tmp = QueueFront(nonemptyQ);
    //此时非空队就只还有一个数据,pop掉就行
    QueuePop(nonemptyQ);
    return tmp;
}

取栈顶元素

int myStackTop(MyStack* obj) {
    //谁不为空就去谁队尾数据
    if(!QueueErase(&obj->q1))
    {
        return QueueBack(&obj->q1);
    }
    else
    {
        return QueueBack(&obj->q2);
    }
}

判断栈空

bool myStackEmpty(MyStack* obj) {
    return QueueErase(&obj->q1)&&QueueErase(&obj->q2);
}

栈销毁

void myStackFree(MyStack* obj) {
    QueueDestroy(&obj->q1);
    QueueDestroy(&obj->q2);
    free(obj);
}

image.png

栈代码(接口代码去我上面文章取) 算法开启小码农队列血脉

typedef struct {
    Queue q1;
    Queue q2;//两个队列
} MyStack;
MyStack* myStackCreate() {
    MyStack* st = (MyStack*)malloc(sizeof(MyStack));
    QueueInit(&st->q1);
    QueueInit(&st->q2);
    return st;
}
void myStackPush(MyStack* obj, int x) {
    if(!QueueErase(&obj->q1))
    {
        QueuePush(&obj->q1,x);
    }
    else//两个都为空时push给q2
    {
        QueuePush(&obj->q2,x);
    }
}
int myStackPop(MyStack* obj) {
    Queue* emptyQ = &obj->q1;
    Queue* nonemptyQ = &obj->q2;//假设q2空,q1非空
    //不是我们就互换位置
    if(!QueueErase(emptyQ))
    {
        nonemptyQ = &obj->q1;
        emptyQ = &obj->q2;
    }
    //非空队长大于一时朝空队里面挪动数据
    while(QueueSize(nonemptyQ)>1)
    {
        //把非队空的对头数拿出push给对空的
        QueuePush(emptyQ,QueueFront(nonemptyQ));
        //然后把非队空的对头数pop掉
        QueuePop(nonemptyQ);
    }
    //因为要返回栈顶数据所以存完再pop
    int tmp = QueueFront(nonemptyQ);
    //此时非空队就只还有一个数据,pop掉就行
    QueuePop(nonemptyQ);
    return tmp;
}
int myStackTop(MyStack* obj) {
    //谁不为空就去谁队尾数据
    if(!QueueErase(&obj->q1))
    {
        return QueueBack(&obj->q1);
    }
    else
    {
        return QueueBack(&obj->q2);
    }
}
bool myStackEmpty(MyStack* obj) {
    return QueueErase(&obj->q1)&&QueueErase(&obj->q2);
}
void myStackFree(MyStack* obj) {
    QueueDestroy(&obj->q1);
    QueueDestroy(&obj->q2);
    free(obj);
}


目录
相关文章
|
7月前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
96 1
|
9月前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
11月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
471 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
11月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
170 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
10月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
11月前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
241 3
|
11月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
121 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
11月前
|
算法 数据挖掘
【栈和队列】算法题 ---- 力扣(二)
【栈和队列】算法题 ---- 力扣
|
11月前
|
存储 算法
【栈和队列】算法题 ---- 力扣(一)
【栈和队列】算法题 ---- 力扣
|
23天前
|
机器学习/深度学习 算法 新能源
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)

热门文章

最新文章