1. 程式人生 > >數據結構——順序棧及其操作

數據結構——順序棧及其操作

div type col SQ clas 數據 -s ack fine

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef int SElemType;
 5 typedef int Status;
 6 #define OK 1
 7 #define ERROR 0
 8 
 9 
10 #define MAXSIZE 100        //棧的最大空間
11 
12 
13 //順序棧的存儲結構
14 typedef struct SqStack
15 {
16     SElemType *base;    //棧底指針
17     SElemType *top;        //棧頂指針
18
}SqStack; 19 20 21 //初始化,構造一個空棧 22 Status InitStack(SqStack &S) //構造一個空棧S 23 { 24 S.base = new SElemType[MAXSIZE]; 25 26 if (!S.base) //空間分配失敗 27 return ERROR; 28 29 S.top = S.base; //空棧 30 return OK; 31 } 32 33 34 //入棧 35 //插入元素e為新的棧頂元素 36 Status Push(SqStack &S, SElemType e)
37 { 38 if (S.top - S.base == MAXSIZE) //棧滿 39 return ERROR; 40 41 *(S.top++) = e; //先e入棧,然後再棧頂指針+1 42 //註意這裏的優先級,等價於*S.top = e; S.top++; 43 return OK; 44 } 45 46 47 //出棧 48 //刪除棧頂元素,用e返回其值 49 Status Pop(SqStack &S, SElemType &e) 50 { 51 if (S.top == S.base
) //棧空 52 return ERROR; 53 54 e = *--S.top; //棧頂指針減1,將棧頂元素賦值給e 55 return OK; 56 } 57 58 59 //取棧頂元素 60 SElemType GetTop(SqStack S) 61 { 62 if (S.top != S.base) //棧非空 63 return *(S.top - 1); //返回棧頂元素的值,棧頂指針不變 64 //註意用S.top - 1 而不是S.top--,因為這樣就會改變棧頂指針 65 } 66 67 68 int main() 69 { 70 int n, x; 71 SqStack S; 72 73 InitStack(S); //初始化順序棧S 74 75 cout << "請輸入順序棧中的元素個數n:" << endl; 76 cin >> n; 77 cout << "請依次輸入" << n << "個元素,依次入棧:" << endl; 78 while (n--) 79 { 80 cin >> x; 81 Push(S, x); 82 } 83 cout << "元素依次出棧:" << endl; 84 while (S.top != S.base) //棧非空 85 { 86 cout << GetTop(S) << " "; 87 Pop(S, x); 88 } 89 90 system("pause"); 91 return 0; 92 }

數據結構——順序棧及其操作