算法开启栈转队列武魂

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

文章目录


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

用栈实现队列

题目

image.png

队结构体

typedef struct {
    ST PushST;//入队栈
    ST PopST;//出队栈
} MyQueue;

队初始化

MyQueue* myQueueCreate() {
    MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));
    StackInit(&q->PushST);//初始化入队栈
    StackInit(&q->PopST);//初始化出队栈
    return q;
}


入“队”

3.gif

void myQueuePush(MyQueue* obj, int x) {
    StackPush(&obj->PushST,x);
}

出“队”并取出队元素

4.gif

int myQueuePop(MyQueue* obj) {
    //如果出队栈为空就从入队栈里面全导过来
    if(StackEmpty(&obj->PopST))
    {
        //导数据
        while(!StackEmpty(&obj->PushST))
        {
            //入队栈栈顶元素拿出来给出队栈
            StackPush(&obj->PopST,StackTop(&obj->PushST));
            //栈把入队栈的栈顶元素pop掉
            StackPop(&obj->PushST);
        }
    }
    //这时就说明都倒完了,所以开始pop掉出队栈元素
    int tmp = StackTop(&obj->PopST);
    StackPop(&obj->PopST);
    return tmp;
}

返回队头

int myQueuePeek(MyQueue* obj) {
    //如果出队栈为空就从入队栈里面全导过来
    if(StackEmpty(&obj->PopST))
    {
        //导数据
        while(!StackEmpty(&obj->PushST))
        {
            //入队栈栈顶元素拿出来给出队栈
            StackPush(&obj->PopST,StackTop(&obj->PushST));
            //栈把入队栈的栈顶元素pop掉
            StackPop(&obj->PushST);
        }
    }
    //就是出队函数那样只取队头而已
    return StackTop(&obj->PopST);
}

判断队空

bool myQueueEmpty(MyQueue* obj) {
    return StackEmpty(&obj->PushST) && StackEmpty(&obj->PopST);
}

队列销毁

void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->PushST);
    StackDestroy(&obj->PopST);
    free(obj);
}

image.png


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

typedef struct {
    ST PushST;//入队栈
    ST PopST;//出队栈
} MyQueue;
MyQueue* myQueueCreate() {
    MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));
    StackInit(&q->PushST);//初始化入队栈
    StackInit(&q->PopST);//初始化出队栈
    return q;
}
void myQueuePush(MyQueue* obj, int x) {
    StackPush(&obj->PushST,x);
}
int myQueuePop(MyQueue* obj) {
    //如果出队栈为空就从入队栈里面全导过来
    if(StackEmpty(&obj->PopST))
    {
        //导数据
        while(!StackEmpty(&obj->PushST))
        {
            //入队栈栈顶元素拿出来给出队栈
            StackPush(&obj->PopST,StackTop(&obj->PushST));
            //栈把入队栈的栈顶元素pop掉
            StackPop(&obj->PushST);
        }
    }
    //这时就说明都倒完了,所以开始pop掉出队栈元素
    int tmp = StackTop(&obj->PopST);
    StackPop(&obj->PopST);
    return tmp;
}
int myQueuePeek(MyQueue* obj) {
    //如果出队栈为空就从入队栈里面全导过来
    if(StackEmpty(&obj->PopST))
    {
        //导数据
        while(!StackEmpty(&obj->PushST))
        {
            //入队栈栈顶元素拿出来给出队栈
            StackPush(&obj->PopST,StackTop(&obj->PushST));
            //栈把入队栈的栈顶元素pop掉
            StackPop(&obj->PushST);
        }
    }
    //就是出队函数那样只取队头而已
    return StackTop(&obj->PopST);
}
bool myQueueEmpty(MyQueue* obj) {
    return StackEmpty(&obj->PushST) && StackEmpty(&obj->PopST);
}
void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->PushST);
    StackDestroy(&obj->PopST);
    free(obj);
}


目录
相关文章
|
16天前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
38 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
20天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
18 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
19小时前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
20天前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
34 3
|
20天前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
19 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
26天前
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
3月前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
3月前
|
算法
【数据结构与算法】优先级队列
【数据结构与算法】优先级队列
15 0
|
7天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。