问题描述:
用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。
代码:
1 #include <stdio.h>
23 int stack[256];
4 int top = -1;
5 void reverse_stack();
6 void put_to_bottom(int val);
7
8 void reverse_stack()
9 {
10 int tmp;
11 if (top <= 0)
12 return;
13 tmp = stack[top--];
14 reverse_stack();
15 put_to_bottom(tmp);
16 }
17
18 void put_to_bottom(int val)
19 {
20 int tmp;
21
22 if (top < 0) //stack empty
23 {
24 ++top;
25 stack[top] = val;
26 return ;
27 }
28
29 tmp = stack[top--];
30 put_to_bottom(val);
31 stack[++top] = tmp;
32 }
33
34 int main()
35 {
36 int i;
37
38 printf("Original stack:\n");
39 for (i = 0; i < 5; i++)
40 {
41 stack[++top] = i + 1;
42 printf("%d,", i+1);
43 }
44 printf("\n");
45
46 reverse_stack();
47
48 printf("Reversed stack:\n");
49 for (i = 0; i < 5; i++)
50 {
51 printf("%d,", stack[i]);
52 }
53 printf("\n");
54
55 }