1. 程式人生 > >數據結構期末復習(いち)--順序棧定義及使用

數據結構期末復習(いち)--順序棧定義及使用

over ID 輸出 數據結構 ack 初始化 動態 ostream return

  1 #include <iostream>
  2 using namespace std;
  3 #define MAXSIZE 100  //順序棧存儲空間初始分配大小
  4 #define OK 1
  5 #define ERROR 0
  6 #define OVERFLOW -1
  7 typedef struct //順序棧結構定義
  8 {
  9     int *base;  //棧底指針
 10     int *top;    //棧頂指針
 11     int stacksize;  //棧可使用的最大容量
 12 } Sqstack;
 13 
 14 //初始化,構造一個空棧
15 int Init_Stack(Sqstack &s) 16 { 17 s.base = new int[MAXSIZE]; //為順序棧動態分配一個最大容量為MAXSIZE的數組空間 18 if(!s.base) exit(-1); //分配失敗則退出 19 s.top = s.base; //top初始為base,表棧空 20 s.stacksize = MAXSIZE; 21 return 0; 22 } 23 24 //入棧操作 25 int Push_Stack(Sqstack &s, int e)
26 { 27 if(s.top - s.base == s.stacksize) //棧滿退出 28 return 1; 29 *s.top++ = e; //將元素e壓入棧頂,同時棧頂指針加1 30 //等同於*s.top=e;s.top++; 31 return 0; 32 } 33 34 //出棧操作 35 int Pop_Stack(Sqstack &s) 36 { 37 if(s.top == s.base) return 1; //棧空 38 --s.top; //棧頂指針減1 39 return
0; 40 } 41 42 //取棧頂元素 43 int Get_Top(Sqstack s) 44 { 45 if(s.top != s.base) //棧非空 46 return *(s.top - 1); //棧頂指針不變,返回棧頂元素的值 47 } 48 49 //輸出棧 50 void printstack(Sqstack s) 51 { 52 while((s.top != s.base)) //棧非空 53 { 54 cout << Get_Top(s) << " "; 55 Pop_Stack(s); 56 } 57 cout << endl; 58 } 59 60 int main() 61 { 62 Sqstack s; 63 Init_Stack(s); 64 for (int i = 0; i < 10; ++i) 65 { 66 Push_Stack(s, i); 67 } 68 int a, b; 69 cout << "1--print,2--pop,3--push,0--exit\n"; 70 for(int i = 0; i < 4; ++i) 71 { 72 cin >> a; 73 if (a == 1) 74 { 75 printstack(s); 76 } 77 else if (a == 3) 78 { 79 cout << "元棧為:"; 80 printstack(s); 81 cout << "請輸入要插入的數:"; 82 cin >> b; 83 Push_Stack(s, b); 84 cout << "插入後棧為:"; 85 printstack(s); 86 } 87 else if (a == 2) 88 { 89 cout << "元棧為:"; 90 printstack(s); 91 //cout<<"請輸入要插入的數:"; 92 //cin>>b; 93 Pop_Stack(s); 94 cout << "pop後棧為:"; 95 printstack(s); 96 } 97 else if (a == 0) 98 { 99 return 0; 100 } 101 } 102 return 0; 103 }

數據結構期末復習(いち)--順序棧定義及使用