1. 程式人生 > >【數據結構】棧 的 順序表示

【數據結構】棧 的 順序表示

lib truct main init eal scanf 取出 div 序表

 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 }

【數據結構】棧 的 順序表示