服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言中用栈+队列实现队列中的元素逆置

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

2022-09-20 21:04MyDreamingCode C/C++

这篇文章主要介绍了C语言中用利用栈和队列实现队列中的元素逆置的相关资料,对正在学习的小伙伴有一定的参考价值,需要的可以参考一下,希望对你有所帮助

下面举例代码:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#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语言中用栈+队列实现队列中的元素逆置的文章就介绍到这了,更多相关用栈+队列实现队列中的元素逆置内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_61706112/article/details/120231560

延伸 · 阅读

精彩推荐
  • C/C++C语言 扩展欧几里得算法代码

    C语言 扩展欧几里得算法代码

    这篇文章介绍了扩展欧几里得算法的实现代码,有需要的朋友可以参考一下...

    C语言教程网2202020-12-24
  • C/C++使用C++制作GC Server过程详解

    使用C++制作GC Server过程详解

    这篇文章主要介绍了使用C++制作GC Server过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    code00410072021-08-03
  • C/C++带你理解C语言中的汉诺塔公式

    带你理解C语言中的汉诺塔公式

    大家好,本篇文章主要讲的是带你理解C语言中的汉诺塔公式,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下...

    Brant_zero10262022-09-01
  • C/C++在Linux下编译C或C++程序的教程

    在Linux下编译C或C++程序的教程

    这篇文章主要介绍了在Linux下编译C或C++程序的教程,是C/C++入门学习中的必备知识,需要的朋友可以参考下...

    C++教程网8312021-03-01
  • C/C++VC++编程获取窗口句柄的方法小结

    VC++编程获取窗口句柄的方法小结

    这篇文章主要介绍了VC++编程获取窗口句柄的方法,简单总结分析了VC++获取窗口句柄的常见函数与使用技巧,需要的朋友可以参考下...

    napolun0074242021-05-25
  • C/C++解析c语言switch中break语句的具体作用

    解析c语言switch中break语句的具体作用

    以下是对c语言switch中break语句的作用进行了详细的分析介绍,需要的朋友可以过来参考下...

    C语言教程网5482020-12-20
  • C/C++C++连接mysql数据库的两种方法小结

    C++连接mysql数据库的两种方法小结

    这篇文章主要介绍了C++连接mysql数据库的两种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    bmjhappy11372021-08-31
  • C/C++C++中的atoi 函数简介

    C++中的atoi 函数简介

    这篇文章主要给大家分享的是C++中的atoi 函数的简单介绍,在 stdlib.h 中 atoi 函数,可用于将 char 字符串转为 int 整数类型,集体的语法操作请参考下面文章的...

    猿说编程6172022-03-07