C语言中用栈+队列实现队列中的元素逆置

 更新时间:2022年02月11日 09:55:15   作者:MyDreamingCode  
这篇文章主要介绍了C语言中用利用栈和队列实现队列中的元素逆置的相关资料,对正在学习的小伙伴有一定的参考价值,需要的可以参考一下,希望对你有所帮助

下面举例代码:

提到的Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法

#include<stdio.h>
#define MaxSize 10
typedef int ElemType;
typedef struct{
    ElemType data[MaxSize];
    int front,rear;
}Queue;
typedef struct{
    ElemType data[MaxSize];
    int top;
}SqStack;
 
void InitStack(SqStack &S) //初始化栈
{
    S.top = -1;
}
 
bool EmptyStack(SqStack S) //判断栈空
{
    if(S.top == -1)
        return true;
    else
        return false;
}
 
bool OverflowStack(SqStack S) //判断栈是否满
{
    if(S.top == MaxSize-1)
        return true;
    else
        return false;
}
 
bool Push(SqStack &S,ElemType x) //进栈
{
    if(OverflowStack(S))
        return false;
    S.data[++S.top] = x;
    return true;
}
 
bool Pop(SqStack &S,ElemType &x) //出栈
{
    if(EmptyStack(S))
        return false;
    x = S.data[S.top--];
    return true;
}
 
void InitQueue(Queue &Q) //初始化队列
{
    Q.front = Q.rear = 0;
}
 
bool IsEmpty(Queue Q) //判断队列是否为空
{
    if(Q.front == Q.rear)
        return true;
    else
        return false;
}
 
bool IsOverflow(Queue Q) //判断队列是否满
{
    if((Q.rear+1)%MaxSize == Q.front)
        return true;
    else
        return false;
}
 
bool EnQueue(Queue &Q,ElemType x) //进队列
{
    if(IsOverflow(Q))
        return false;
    Q.data[Q.rear] = x;
    Q.rear = (Q.rear+1)%MaxSize;
    return true;
}
 
bool DeQueue(Queue &Q,ElemType &x) //出队列
{
    if(IsEmpty(Q))
        return false;
    x = Q.data[Q.front];
    Q.front = (Q.front+1)%MaxSize;
    return true;
}
 
bool ReverseQueue(Queue &Q) 
{
    SqStack S;
    ElemType x;
    InitStack(S);
    while(!IsEmpty(Q)) //当队列不为空时,将队列中的元素依次放入栈中
    {
        DeQueue(Q,x);
        Push(S,x);
    }
    while(!EmptyStack(S)) //当栈不为空时,再将栈中元素依次放入队列中
    {
        Pop(S,x);
        EnQueue(Q,x);
    }
    return true;
}
 
void main()
{
    Queue Q;
    InitQueue(Q);
    EnQueue(Q,1);
    EnQueue(Q,2);
    EnQueue(Q,3);
    ReverseQueue(Q);
    printf("%d ",Q.data[Q.front]);
}

(根据主函数中代码)演示:

例如一开始队列中元素为3 2 1 ->出

1. 将队列中元素依次放到栈中,此时栈:1 2 3 ->出

2. 再将栈中的元素依次放入队列中,此时队列:1 2 3 ->出 

到此这篇关于C语言中用栈+队列实现队列中的元素逆置的文章就介绍到这了,更多相关用栈+队列实现队列中的元素逆置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解QT使用QtGui显示QImage的几种方法

    详解QT使用QtGui显示QImage的几种方法

    本文主要介绍了QT使用QtGui显示QImage的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • MFC程序设计常用技巧汇总

    MFC程序设计常用技巧汇总

    这篇文章主要介绍了MFC程序设计常用技巧,实例汇总了MFC程序设计中常见的问题与解决方法,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • c/c++基础简单易懂的快速排序算法

    c/c++基础简单易懂的快速排序算法

    这篇文章主要为大家介绍了c/c++基础非常简单易懂的快速排序算法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • c++网络编程下Linux的epoll技术和Windows下的IOCP模型

    c++网络编程下Linux的epoll技术和Windows下的IOCP模型

    c++ 网络编程LINUX-epoll/windows-IOCP下socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题,感兴趣的小伙伴一起来学习吧
    2021-08-08
  • C语言利用goto语句设计实现一个关机程序

    C语言利用goto语句设计实现一个关机程序

    今天给大家分享一个非常有趣的知识——用goto语句编写一个关机小程序。主要用到了shutdown命令语句、goto语句、strcmp函数等知识点,感兴趣的可以了解一下
    2023-01-01
  • C语言 strcpy和memcpy区别详细介绍

    C语言 strcpy和memcpy区别详细介绍

    这篇文章主要介绍了C语言 strcpy和memcpy区别详细介绍的相关资料,需要的朋友可以参考下
    2017-01-01
  • C语言版二值图像统计连通区域

    C语言版二值图像统计连通区域

    这篇文章主要为大家详细介绍了C语言版二值图像统计连通区域的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • VSCode配置C/C++并添加非工作区头文件的方法

    VSCode配置C/C++并添加非工作区头文件的方法

    这篇文章主要介绍了VSCode配置C/C++并添加非工作区头文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Matlab计算变异函数并绘制经验半方差图详解

    Matlab计算变异函数并绘制经验半方差图详解

    这篇文章主要为大家详细介绍了基于MATLAB求取空间数据的变异函数,并绘制经验半方差图的方法。文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-04-04
  • C++中const的用法详细总结

    C++中const的用法详细总结

    以下是对C++中const的用法进行了详细的总结分析,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-09-09

最新评论