C语言:利用队列逆置栈

2023-11-17

 关注作者:Aqu-蓝空


定义一些功能的函数:

  • void InitStack(SqStack *S);//栈的初始化
  • void Push(SqStack *S,int data);//入栈
  • int Pop(SqStack *S);//出栈
  • void StackTraverse(SqStack *S);//打印栈中的元素
  • void InitQueue(SqQueue *Q);//队的初始化
  • void EnQueue(SqQueue *Q,int data);//入队
  • int DeQueue(SqQueue *Q);//出队
  • void nizhiStack(SqStack *S,SqQueue *Q);//栈的逆置

具体的代码实现请看下文的全部代码 

 全部代码:

#include<stdio.h>
#include<stdlib.h>
#define StackMaxsize 50
#define QueueMaxsize 50
typedef struct SqStack
{
    int data[StackMaxsize];
    int top;
}SqStack;
typedef struct SqQueue
{
    int data[QueueMaxsize];
    int front;
    int rear;
}SqQueue;
void InitStack(SqStack *S);//栈的初始化
void Push(SqStack *S,int data);//入栈
int Pop(SqStack *S);//出栈
void StackTraverse(SqStack *S);//打印栈中的元素
void InitQueue(SqQueue *Q);//队的初始化
void EnQueue(SqQueue *Q,int data);//入队
int DeQueue(SqQueue *Q);//出队
void nizhiStack(SqStack *S,SqQueue *Q);//栈的逆置
void main()//主函数
{
    int data,choose,n,i;
    SqStack S1;
    SqStack *S=&S1;
    SqQueue Q1;
    SqQueue *Q=&Q1;
    InitStack(S);
    for(;;)
    {
        printf("有以下几项选择:\n");
        printf("0.退出 1.入栈 2.出栈 3.将栈逆置 4.从栈底到栈顶打印栈内元素\n");
        printf("请输入您的选择:");
        scanf("%d",&choose);
        switch(choose)
        {
            case 0:exit(0);
            case 1:
                {
                    if(StackMaxsize-S->top<=0)
                        printf("栈满,无法入栈!\n");
                    else
                    {
                        printf("请输入要入栈的个数:");
                        scanf("%d",&n);
                        printf("请输入要入栈的元素:");
                        for(i=0;i<n;i++)
                        {
                                scanf("%d",&data);
                                Push(S,data);
                                StackTraverse(S);
                        }
                        printf("入栈成功!\n");
                    }
                    break;
                }
            case 2:
                {
                    if(S->top==0)
                        printf("栈空,无法出栈!\n");
                    else
                    {
                        data=Pop(S);
                        printf("出栈成功,出栈的元素为:%d\n",data);
                        StackTraverse(S);
                    }
                    break;
                }
            case 3:
                {
                    if(S->top==0)
                        printf("栈空,无法逆置!\n");
                    else
                       {
                           nizhiStack(S,Q);
                        StackTraverse(S);
                       }
                    break;
                }
            case 4:StackTraverse(S);break;
            default:printf("输入数字无效!\n");
        }
    }
}
void InitStack(SqStack *S)
{
    S->top=0;
}
void Push(SqStack *S,int data)
{
    if((StackMaxsize-S->top>=0))
    {
        S->data[++S->top]=data;
    }
    else
        printf("栈满!\n");
}
int Pop(SqStack *S)
{
    int data;
    if(S->top==0)
        printf("栈空!\n");
    else
    {
        data=S->data[S->top--];
        return data;
    }

}
void StackTraverse(SqStack *S)//打印
{
    int i;
    if(S->top==0)
        printf("栈空!\n");
    else if((StackMaxsize-S->top<0))
        {
            printf("栈满,无法入栈!\n");

        }
    else
    {
        printf("从栈底到栈顶的元素依次为:");
        for(i=1;i<=S->top;i++)
        {
            printf("%d ",S->data[i]);
        }
        printf("\n");
    }
}

void InitQueue(SqQueue *Q)
{
    Q->front=Q->rear=0;
}
void EnQueue(SqQueue *Q,int data)
{
    if((Q->rear+1)%QueueMaxsize==Q->front)
    {
        printf("队满,无法入队!\n");
    }
    else
    {
        Q->data[Q->rear]=data;
        Q->rear=(Q->rear+1)%QueueMaxsize;
    }
}
int DeQueue(SqQueue *Q)
{
    int data;
    if(Q->front==Q->rear)
        printf("队空,无法出队!\n");
    else
    {
        data=Q->data[Q->front];
        Q->front=(Q->front+1)%QueueMaxsize;
        return data;
    }
}
void nizhiStack(SqStack *S,SqQueue *Q)
{
    int i;
    InitQueue(Q);
    for(i=S->top;i>0;i--)
    {
        EnQueue(Q,Pop(S));
    }
    for(i=Q->front;i%QueueMaxsize!=Q->rear;i++)
    {
        Push(S,DeQueue(Q));
    }
    printf("逆置栈内元素成功!\n");
}

 结果演示:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言:利用队列逆置栈 的相关文章

  • Nmap食用指北

    Nmap食用指北 Nmap简介 Nmap Network mapper 是目前最流行的网络扫描工具 它不仅能够准确地探测单台主机的详细情况 而且能够高效率地对大范围IP地址段进行扫描 使用Nmap能够得知目标网络上哪些主机是存活的 以及哪些
  • 新闻网大数据实时分析可视化系统项目——10、数据采集/存储/分发完整流程测试...

    一 idea工具开发数据生成模拟程序 1 在idea开发工具中构建weblogs项目 编写数据生成模拟程序 package main java import java io public class ReadWrite static Str
  • LeetCode 面试题 03.02. 栈的最小值

    文章目录 一 题目 二 C 题解 一 题目 请设计一个栈 除了常规栈支持的 pop 与 push 函数以外 还支持 min 函数 该函数返回栈元素中的最小值 执行 push pop 和 min 操作的时间复杂度必须为 O 1 点击此处跳转题
  • 面试题:6种解法-顺序打印A1B2C3

    金不三 银不四的高频面试题 Java 中顺序打印 A1B2C3 是多线程中的一个经典面试问题 其解决方法可以锻炼程序员的多线程编程能力 本文将从多个角度 介绍 Java 中顺序打印 A1B2C3 的实现方式 总共分为如下6种方式 synch
  • VAE-GAN学习记录

    一 遇到的问题以及学习目的 学习VAE GAN主要是因为最近在做故障诊断相关的东西 之前在某篇论文里得知 使用GAN算法时 可以使用判别损失 重构损失对异常样本进行检测 然而 那篇论文 基于 LSTM GAN 的加油时序数据异常检测 里面
  • SpringBoot数据库连接池Hikari配置

    在项目中 一般情况下访问数据库 会创建一个连接 用完后就关闭它 对于简单的系统这样不会带来什么明显的性能上的开销 但是对于一个复杂的系统 频繁的建立 关闭连接 会极大的减低系统的性能 因为对于数据库连接的使用可能会成为系统性能的瓶颈 数据库
  • MATLAB2017a使用FasterRcnn目标检测训练及其测试流程

    本文在matlab2017a已有的FasterRcnn算法基础上来检测人群 流程比较简单 对一些初学者来说比较容易理解和操作 1 安装所需要的软硬件环境 1 1 硬件环境 CPU Intel i5 GPU GTX940m 内存 4G 硬盘

随机推荐

  • Java 8使用Steam().map()提出List对象的某一列的值及重新排序

    这几天遇到一个这样的问题 本来想着是从map中拿到数据在遍历出来的的 但是显得自己很麻烦 于是找了很多方式 测试各个方法的可用性 这里就简单记录一下一些Java8里面的好用的一些方法 Java8 使用 stream map 提取List对象
  • QT开发 - 信号槽写法

    1 Lambda写法 非重载函数 QCheckBox checkBox1 new QCheckBox check box1 connect checkBox1 QCheckBox stateChanged int state m statu
  • 类的访问权限-public、private、protected

    访问权限 protected 保护 访问权限 为什么要使用protected访问权限 子类的成员函数中 不能直接访问父类的private成员 已经这些成员已经被继承下来了 但是却不能访问 只有通过父类的public函数来间接访问 不是很方便
  • Windows server 2008搭建文件服务器

    服务器达到要求 各部门只能访问自己部门服务器 公司员工只能读取和修改文档 普通用户限制磁盘空间是20M 部门经理50M 总经理不受限制 市场部文件允许读取和修改 不能删除 限制电影 照片文件格式 完成数据备份 并模拟数据丢失进行还原 总体思
  • Protobuf Java (1)

    参考 https developers google cn protocol buffers docs javatutorial 目录 1 定义protobuf 文件 2 编译你的 Protocol Buffers 3 ProtoBuf A
  • git源代码泄露

    需要的工具 kali githack win版没下载成功 安装方法 kali命令行中输入 git clone https github com lijiejie GitHack 下载成功如下 输入GitHack 然后输入python Git
  • Java文件输入流如何才能一行一行读取,一行一行写入

    文件输入流 而且和行有关 那么就必须要想到使用Buffered缓冲流了 BufferedReader和BufferedWriter这两个类里面有很重要的方法 BufferedReader里是readLine BufferedWriter里是
  • UE4 通过Echarts实现各种统计图

    主要内容 本文主要讲解UE4 UMG向网页发送数据 通过WebBrowser插件将用Echarts定制好的统计图在UE4内展现出来 达到数据可视化的效果 本文主要演示柱形图的效果 其它类型的统计图可以结合Echarts官方案列以及文档自行修
  • springboot整合JSR303校验

    4 7 JSR303校验 4 7 1 统一校验的需求 前端请求后端接口传输参数 是在controller中校验还是在Service中校验 答案是都需要校验 只是分工不同 Contoller中校验请求参数的合法性 包括 必填项校验 数据格式校
  • coalesce 函数详解与学习记录

    1 在工作中都用到了此函数 特此学习并记录一下 2 coalesce 用途 1 将空值替换成其他值 2 返回第一个非空值 3 SQL实例 一 select coalesce success cnt 1 from tableA 当succes
  • Python使用管道、队列、zeromq进行IPC速度对比测试

    管道 import sys from multiprocessing import Process Pipe import time import result msg list for i in range 100 msg list ap
  • YOLOv5 backbone(一)

    Backbone概览及参数 Parameters nc 80 number of classes depth multiple 0 33 model depth multiple width multiple 0 50 layer chan
  • 利用外部中断和时间中断计数0-999显示在数码管上(考题)

    include
  • Ubuntu(20.04):设置DNS

    编辑文件 etc systemd resolved conf 设置DNS 8 8 8 8 114 114 114 114 保存退出后 以sudo身份运行 systemctl restart systemd resolved systemct
  • 开源之父--Linus

    Git 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Linux
  • Python3 初学 DAY2

    num1 minute py minute 7 24 60 print minute num2 print py 注 显示颜色格式 033 显示方式 字体色 背景色m 033 0m 显示颜色参数 显示方式 效果 字体色 背景色 颜色描述 0
  • spark报Got an error when resolving hostNames. Falling back to /default-rack for all

    一 报错代码如下 21 06 01 20 13 36 INFO yarn SparkRackResolver Got an error when resolving hostNames Falling back to default rac
  • 【Spring】Spring官方文档笔记

    Spring 官方文档 和任何一本spring书籍相比 它都更新更全 文章目录 Spring 1 控制反转 Inversion of Control IoC 1 1 依赖注入 dependency injection DI 1 Spring
  • java虚拟机+分隔符

    java 入门 java 虚拟机 1 java虚拟机的平台可移植性 只要将java虚拟机安装于不同平台 我们编译的 class 文件就可以运行 2 jdk java开发 3 jre java运行时环境 jdk jre 下载安装后必须在环境变
  • C语言:利用队列逆置栈

    关注作者 Aqu 蓝空 定义一些功能的函数 void InitStack SqStack S 栈的初始化 void Push SqStack S int data 入栈 int Pop SqStack S 出栈 void StackTrav