微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

栈逆序后输出

<table class="text"><tr class="li1">
<td class="ln"><pre class="de1">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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133

代码最后输出的只是你一开始输入的数字,Inverser(S,Q),改变的只是形参的数值,而不是实际的 队列Q,而且形参队列Q里面的数值其实变成了 [1 2 3 3 2 1] 六个,你调试的时候可以看到,主函数执行完之 后,Q还是 [1 2 3],不会发生改变。 你可以用指针传参试试,也可以直接将Inverser方法去掉,直接写在主函 数里:如下,在定义一个队列。希望对你有帮助 #include #define MaxSize 100 //定义栈结构 typedef struct{     int data[MaxSize];     int top; }Stack; //定义队列结构 typedef struct {     int data[MaxSize];     int front,rear; }Queue;   //初始化队列 void InitQueue(Queue &Q) {     Q.front = Q.rear = 0;     printf("循环队列初始化成功\n"); }   //判空 bool QueueEmpty(Queue Q) {     if(Q.front == Q.rear) {         return true;     }else {         return false;     } } //入队  bool EnQueue(Queue &Q,int &e) {      //判断队列是否满,可以通过队尾指针的下一个位置就是队头来判断      if((Q.rear + 1) % MaxSize == Q.front) {          printf("队列已经满了,%d不能再入队\n",e);          return false;      }      //在队列尾部入队      Q.data[Q.rear] = e;      printf("入队列的元素: %d\n",e);      Q.rear = (Q.rear + 1) % MaxSize;   //队尾指针加1取模      return true;        }   //出队 int DeQueue(Queue &Q,int &x) {     if(Q.rear == Q.front) {         return 0;    //队列为空,不能再出队了       }     x = Q.data[Q.front];     Q.front = (Q.front + 1) % MaxSize;     return x; }    //初始化栈 void InitStack(Stack &S) {     S.top = -1;     printf("顺序栈初始化成功\n"); }   bool StackEmpty(Stack S) {     if(S.top == -1) {      //判断栈空         return true;     }else {         return false;     } }   void Push(Stack &S,int &x) {     if(S.top == MaxSize-1 ) {         printf("顺序栈已经满了,无法进栈\n");     }     printf("\n入栈元素: %d\n",x);     S.data[++S.top] = x; }   int Pop(Stack &S,int &x) {     if(S.top == -1) {         printf("栈已经空了,不能出栈\n");     }     x = S.data[S.top--];     printf("\n出栈元素: %d\n",x);     return x; } //打印队列中的元素 void printQueue(Queue Q) {     while(!QueueEmpty(Q)) {         printf("%3d",Q.data[Q.front]);         Q.front = (Q.front + 1) % MaxSize;     } }   int main() {     Stack S;     Queue Q;     Queue InverserQ;     InitQueue(Q);     InitQueue(InverserQ);     InitStack(S);     if(QueueEmpty(Q)) {  //返回true         printf("该循环队列为空\n");     }else {         printf("该循环队列不空\n");     }     int e;     printf("请输入想要入队的元素,以负数作为结束输入:  ");     while(scanf("%d",&e)) {         if(e < 0) {             break;         }         EnQueue(Q,e);     }     printf("\n输入的队列元素顺序为:\n");     printQueue(Q);     //逆序     if( Q.front == Q.rear || (Q.rear - Q.front + MaxSize) % MaxSize == 1) {             printf("\n不需要逆置\n");         return 0;     }     int x;     while(!QueueEmpty(Q)) {         DeQueue(Q,x);   //将队列中的元素依次出队         Push(S,x);    //再全部Push进入栈中     }       while(!StackEmpty(S)) {         Pop(S,x);      //将栈中元素全部出栈         EnQueue(InverserQ,x);    //再将出栈的元素依次进队     }        printf("\n逆序后队列元素顺序为:\n");         printQueue(InverserQ); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐