【数据结构】栈 的 顺序表示

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct SqStack {
 5     int *base;
 6     int *top;
 7     int stacksize;
 8 }SqStack; 
 9 
10 //创建顺序栈 
11 SqStack InitStack() {   
12     SqStack S;
13     S.base = (int*)malloc(10*sizeof(int));
14     if(!S.base)
15     exit(0);
16     S.top = S.base;
17     S.stacksize = 10 ;
18     return S;
19 }
20 
21 //设置为空栈 
22 int ClearStack(SqStack &S) {
23     S.top = S.base;
24     return 0;
25 }
26 
27 //将元素入栈 
28 int Push(SqStack &S , int e) {
29     
30     if(S.top - S.base >= S.stacksize)
31     {
32         S.base = (int *)realloc(S.base , (S.stacksize + S.stacksize/2)*sizeof(int));
33         if(!S.base)
34         exit(0);
35         S.top = S.base + S.stacksize ;
36         S.stacksize += S.stacksize/2 ;
37     }
38     *S.top++ = e;
39 }
40 
41 //弹出栈顶元素 
42 int Pop(SqStack &S) {
43     if(S.base == S.top)
44     return 0;
45     return *--S.top;
46 }
47 
48 //取出栈顶元素 
49 int GetTop(SqStack &S) {
50     if(S.base == S.top)
51     return 0;
52     return *(S.top-1);
53 }
54 
55 //将栈内元素倒置 
56 void StackTraverse(SqStack &S) {
57     SqStack S1 = InitStack();
58     while(S.base != S.top) 
59         Push(S1 , Pop(S));
60     S = S1 ;
61 }
62 
63 //输出所有元素 
64 int PrintfStack(SqStack &S) {
65     for( ; ; ) {
66         if(S.base == S.top)
67         return 0;
68         printf("%d" , Pop(S));
69     }
70 }
71 int main() {
72     SqStack S ;
73     S = InitStack();
74     int  n = 0 ;
75     for(int i = 0 ; i < 2 ; i++)
76     {
77         scanf("%d" , &n);
78         Push(S , n);
79     }
80     StackTraverse(S);
81     PrintfStack(S);
82 }

 

posted @ 2018-08-06 16:03  LiZR07  阅读(298)  评论(0编辑  收藏  举报