新建一个栈,读取标准输入 3 个整数 3 4 5,入栈 3 4 5,依次出栈,打印 5 4 3,新建循环队列(Maxsize 为 5),
读取标准输入 3 4 5 6 7,入队 7 时,队满,打印 false,然后依次出队,输出 3 4 5 6
Input
读取标准输入,内容依次是 3 4 5,换行后,接着是 3 4 5 6 7
Output
如果输入是 3 4 5,换行,接着是 3 4 5 6 7,那么输出是
5 4 3
false
3 4 5 6
注意每个数字占用两个字符的位置,5 之前是有一个空格的,第三行的 3 之前也是有一个空格的

栈、队列出队入队

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
#include <stdio.h>
#include <stdlib.h>

// 定义栈
typedef int ElemType;
typedef struct {
ElemType data[MaxSize]; // 数组
int top; // 始终指向栈顶的一个变量
} SqStack;

// 初始化栈
void initStack(SqStack &S) {
S.top = -1;//代表栈为空
}

// 入栈
bool push(SqStack &S, ElemType x) {
if (S.top == MaxSize - 1) {//数组的大小不能改变,避免访问越界
return false;
}
S.data[++S.top] = x;
return true;
}

// 出栈
bool pop(SqStack &S, ElemType &x) {
if (-1 == S.top) {
return false;
}
x = S.data[S.top--];//后减减,x=S.data[S.top];S.top=S.top-1;
return true;
}

// 定义一个循环队列
typedef struct {
ElemType data[MaxSize];
int front, rear;// 队列头 队列尾
} SqQueue;

// 初始化
void initQueue(SqQueue &Q) {
Q.front = Q.rear = 0;
}

// 入队
bool enQueue(SqQueue &Q, ElemType x) {
if ((Q.rear + 1) % MaxSize == Q.front) { // 判断是否队满
return false;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}

// 出队
bool deQueue(SqQueue &Q, ElemType &x) {
if (Q.rear == Q.front) { // 判断是否为空
return false;
}
x = Q.data[Q.front]; // 先进先出
Q.front = (Q.front + 1) % MaxSize;
return true;
}

int main() {
SqStack S; // 先进后出
bool flag;
ElemType m; // 用来存放拿出来的元素
// 初始化栈
initStack(S);
// 入队
int i, num;
for (i = 0; i < 3; i++) {
scanf("%2d", &num);
push(S, num);
}
// 出队
for (i = 0; i < 3; i++) {
pop(S, m);
printf("%2d", m);
}
printf("\n");

// 初始化队列
SqQueue Q;
initQueue(Q);
for (i = 0; i < 5; i++)//入队 5 个元素,最后一个元素不会入队成功
{
scanf("%d", &num);
flag = enQueue(Q, num);
if (false == flag) {
printf("false\n");
}
}
ElemType element;
for (i = 0; i < 4; i++)//出队 4 个元素并打印每一个
{
deQueue(Q, element);
printf("%2d", element);
}
printf("\n");
return 0;
}