用两个栈实现队列

2023-12-05

目录

一、栈的基本结构及其接口

二、我的队列结构定义

三、我的队列创建及其初始化

四、我的队列入队

五、我的队列出队

六、我的队列取队头元素

七、我的队列判空

八、我的队列销毁


一、栈的基本结构及其接口


//栈的结构定义
typedef int STDataType;
 
typedef struct Stack{
    STDataType *a;
    int top;
    int capacity;
}ST;
 
//栈的初始化
void STInit(ST* pst)
{
    pst->a=NULL;
    pst->top=0;
    pst->capacity=0;
}
 
//栈的扩容
void checkcapacity(ST* pst)
{
    if(pst->top==pst->capacity)
    {
        int newcapacity=pst->capacity==0?4:pst->capacity*4;
        STDataType* tmp=(STDataType*)realloc(pst->a,sizeof(STDataType)*newcapacity);
        if(tmp==NULL)
    
        {
            perror("realloc fail");
            exit(-1);
        }
        pst->a=tmp;
        pst->capacity=newcapacity;
    }
}
 
//入栈
void STPush(ST* pst,STDataType x)
{
    assert(pst);
    checkcapacity(pst);
    pst->a[pst->top++]=x;
}
 
//出栈
void STPop(ST* pst)
{
    assert(pst);
    
    assert(pst->top);//空栈
    pst->top--;
}
 
//取栈顶元素
STDataType STTop(ST* pst)
{
    assert(pst);
    assert(pst->top);//空栈
    return pst->a[pst->top-1];
}
 
//判断栈是否为空
bool STEmpty(ST* pst)
{
    return pst->top==0;
}
 
//销毁栈
void STDestroy(ST* pst)
{
    assert(pst);
    free(pst->a);
    pst->a=NULL;
    pst->top=0;
    pst->capacity=0;
 
}

二、我的队列结构定义

//我的队列
typedef struct {
    ST s1;
    ST s2;
} MyQueue;

三、我的队列创建及其初始化

//我的队列的创建及其初始化
MyQueue* myQueueCreate() {
    MyQueue* myqueue=(MyQueue*)malloc(sizeof(MyQueue));
    if(myqueue==NULL)
    {
    
        perror("malloc fail");
        exit(-1);
    }
    STInit(&myqueue->s1);
    STInit(&myqueue->s2);
    return myqueue;
}

四、我的队列入队

//我的队列入队
void myQueuePush(MyQueue* obj, int x) {
    STPush(&obj->s1,x);
}

五、我的队列出队

//我的队列出队
int myQueuePop(MyQueue* obj) {
    while(obj->s1.top>1)
    {
        STPush(&obj->s2,STTop(&obj->s1));
        STPop(&obj->s1);
    }
    int tmp=STTop(&obj->s1);
    STPop(&obj->s1);
    
    while(obj->s2.top>0)
    {
        STPush(&obj->s1,STTop(&obj->s2));
        STPop(&obj->s2);
    }
    return tmp;
}

六、我的队列取队头元素

//我的队列取队头元素
int myQueuePeek(MyQueue* obj) {
    while(obj->s1.top>1)
    {
        STPush(&obj->s2,STTop(&obj->s1));
        STPop(&obj->s1);
    }
    int tmp=STTop(&obj->s1);
    while(obj->s2.top>0)
    {
        STPush(&obj->s1,STTop(&obj->s2));
        STPop(&obj->s2);
    }
    return tmp;
}

七、我的队列判空

//我的队列判空
bool myQueueEmpty(MyQueue* obj) {
    return STEmpty(&obj->s1);
}

八、我的队列销毁

//我的队列销毁
void myQueueFree(MyQueue* obj) {
    STDestroy(&obj->s1);
    STDestroy(&obj->s2);
    free(obj);
    obj=NULL;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用两个栈实现队列 的相关文章

随机推荐

  • REC——命令执行漏洞

    原理 命令执行漏洞是一种常见的安全漏洞 它允许攻击者在受攻击的系统上执行任意的系统命令 这种漏洞的原理通常是 应用程序没有正确地验证和过滤用户输入数据 允许恶意用户可以在输入框等地方注入恶意的系统命令 攻击者可以将恶意的命令附加到应用程序接
  • Jmeter进行压力测试不为人知的秘密

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • 华为OD机试真题-最长子字符串的长度(一)-2023年OD统一考试(C卷)

    题目描述 给你一个字符串 s 字符串s首尾相连成一个环形 请你在环中找出 o 字符出现了偶数次最长子字符串的长度 输入描述 输入是一串小写字母组成的字符串 输出描述 输出是一个整数 补充说明 1 lt s length lt 5 x 10
  • 【UI自动化测试】Jenkins配置

    前一段时间帮助团队搭建了UI自动化环境 这里将Jenkins环境的一些配置分享给大家 背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测
  • 栈和队列的OJ题——14.用栈实现队列

    14 用栈实现队列 232 用栈实现队列 力扣 LeetCode 解题思路 此题可以用两个栈实现 一个栈进行入队操作 另一个栈进行出队操作 出队操作 当出队的栈不为空是 直接进行出栈操作 如果为空 需要把入队的栈元素全部导入到出队的栈 然后
  • 青藏高原对中国来说到底有多重要?

    青藏高原对中国来说到底有多重要 这个问题涉及到多个方面 包括地理 历史 文化 政治和经济等 在这篇文章中 我们将从不同的角度探讨青藏高原的重要性 首先 从地理角度来看 青藏高原是中国乃至全世界最年轻 最高 最大 最具特色的高原之一 它位于中
  • 基于GWO-BP灰狼算法优化BP神经网络多维回归预测(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文档讲解
  • 一文讲透Python线程池ThreadPoolExecutor!

    01 初识 Python 中已经有了 threading 模块 为什么还需要线程池呢 线程池又是什么东西呢 在介绍线程同步的信号量机制的时候 举得例子是爬虫的例子 需要控制同时爬取的线程数 例子中创建了20个线程 而同时只允许3个线程在运行
  • 无惧代码错误,从unittest开始的单元测试之旅!

    前言 单元测试 Unit Testing 是根据特定的输入数据 针对 程序模块 输出的正确性进行验证的工作 这些程序模块包括 单个程序 函数 类 我们在实现一个程序时不能仅仅实现功能方面的端到端调试 仅仅是能够从数据输入到数据输出能够实现贯
  • HTTPS 之fiddler抓包--jmeter请求

    一 浅谈HTTPS 我们都知道HTTP并非是安全传输 在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的 目前越来越多的企业选择使用HTTPS协议与用户进行通信 如百度 谷歌等 HTTPS在传输数据之前需要客户端 浏览
  • 光储并网直流微电网simulink仿真模型

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现
  • 文件包含漏洞

    文件包含漏洞介绍 文件包含漏洞也是一种注入型漏洞 其本质就是输入一段用户知道路径的文件 然后将文件包含到当另一个文件里面形式如下 http 127 0 0 1 pikachu master vul fileinclude fi local
  • 【安全密钥交换协议】基尔霍夫定律-约翰逊噪声(KLJN)方案的随机数生成器攻击研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 算例1 2 2 算例2
  • 基于精英遗传算法的电动汽车有序充电方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 测试提交的bug开发不认可怎么办?

    当测试提交的Bug开发不认可时 可以采取以下步骤来解决问题 1 澄清沟通 首先 与开发人员进行详细的沟通 确保对Bug的描述清晰准确 并提供相关的复现步骤 截图或日志等支持材料 确保开发人员对Bug的具体情况有充分的了解 2 提供更多信息
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • 华为OD机试真题-项目排期-2023年OD统一考试(C卷)

    题目描述 项目组共有N个开发人员 项目经理接到了M个独立的需求 每个需求的工作量不同 且每个需求只能由一个开发人员独立完成 不能多人合作 假定各个需求直接无任何先后依赖关系 请设计算法帮助项目经理进行工作安排 使整个项目能用最少的时间交付
  • 栈和队列的OJ题--13.用队列实现栈

    13 用队列实现栈 225 用队列实现栈 力扣 LeetCode 解题思路 此题可以用两个队列去实现一个栈 每次始终保持一个队列为空 入栈操作相当于给非空队列进行入队操作 出栈操作相当于非空队列的队尾元素出队 此时需要把非空队列除最后一个元
  • 基于GWO-BP灰狼算法优化BP神经网络多维分类预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 讲解文档
  • 用两个栈实现队列

    目录 一 栈的基本结构及其接口 二 我的队列结构定义 三 我的队列创建及其初始化 四 我的队列入队 五 我的队列出队 六 我的队列取队头元素 七 我的队列判空 八 我的队列销毁 一 栈的基本结构及其接口 栈的结构定义 typedef int