順序棧的簡單操作

Diy_os發表於2015-10-17
關於順序棧的簡單操作如下, 由於主要介紹思想實現,讀者從程式碼中可以很容易看出很多漏洞。如有錯誤之處,請大家指正!

點選(此處)摺疊或開啟

  1. #include<iostream>
  2. using namespace std;
  3. #define MAXSIZE 10

  4.  struct Stack {

  5.     int data[MAXSIZE];
  6.     int top;
  7. };

  8.  Stack *CreateStack();     //該步驟函式宣告必須放在結構體後面
  9.  void InitialStack(Stack *);
  10.  void InsertStack(Stack *, int, int);
  11.  void DeleteStack(Stack *, int);
  12.  void PrintStack(Stack *);

  13. Stack *CreateStack() {

  14.     Stack *p = new Stack;  //建立指向棧的指標p
  15.     p->top = -1;           //因為是順序棧,儲存資料放在陣列中,為了一致性,top指標置於-1,表明棧為空
  16.     return p;

  17. }

  18. void InitialStack(Stack *p) {

  19.     Stack *head;
  20.     head = p;

  21.     cout << "入棧的順序是:" << endl;
  22.     
  23.     int MAX_SIZE = MAXSIZE - 1;

  24.     while (head->top != MAX_SIZE - 1) {

  25.         head->top++;   //該步可以省略,下步改為:head->data[++head->top] = head->top;就是賦值與自加的先後順序
  26.         head->data[head->top] = head->top;
  27.         cout << head->data[head->top] << "--&gt";
  28.     }

  29.     cout << "輸出結束";
  30.     cout << endl;
  31.     
  32. }

  33. void InsertStack(Stack *p, int i, int x) {
  34.     
  35.     Stack *q;

  36.     int length = p->top; //這裡一定要注意,棧只能從一端進入彈出,要保證top指標不能夠被修改
  37.     p->top += 1;         //由於插入一個資料,棧長度+1(更準確的說是陣列下標+1)
  38.     q = p;

  39.     int llength = q->top;
  40.     int flag = llength;

  41.     for (int n = 0; n <= flag - i; n++) { //一定要保證變與不變,演算法實現,透過圖解讀者可以清楚知道各引數意義

  42.         q->data[llength--] = q->data[length--]; 
  43.     }

  44.     q->data[i -1] = x;

  45.     
  46. }

  47. void DeleteStack(Stack *p, int i) {

  48.     Stack *q;

  49.     int length = p->top;
  50.     q = p;

  51.     int l = i;
  52.     int j = i - 1;

  53.     for (int n = 0; n <= length - l+1; n++) {

  54.         q->data[j++] = q->data[i++];   //刪除操作,對於陣列很簡單就是覆蓋操作
  55.     }

  56.     p->top = p->top - 1;

  57.    
  58. }
  59. void PrintStack(Stack *p) {

  60.     Stack *q;
  61.     q = p;

  62.     cout << "出棧的順序是:" << endl;

  63.     while (q->top >=0) {

  64.         cout << q->data[q->top--] << "--&gt";
  65.         
  66.     }

  67.     cout << "出棧結束" << endl;
  68. }

  69. int main() {

  70.     Stack *p;

  71.     p = CreateStack();
  72.      InitialStack(p);

  73.    // InsertStack(p, 5, 11);
  74.     //PrintStack(p);

  75.     DeleteStack(p, 5);
  76.     PrintStack(p);
  77. }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1814693/,如需轉載,請註明出處,否則將追究法律責任。

相關文章