簡單用數組模擬順序棧(c++)


**棧是一種操作受限制的線性表,太多官方的話我也不說了,我們都知道棧元素是先進后出的,它有兩種存儲結構,分別是順序存儲結構和鏈式存儲結構。

**今天我先記一下順序存儲結構,后面我會加上鏈式存儲結構的。

**我看到別人的順序棧都是用別的方式來寫的,我現在這里用的是一維數組,也就是用數組模擬。由於要用到bool型,所以我直接用c++來寫,大家可以相應改成C語言的版本,並不難。

**順序棧的操作 無非是基本的八個,分別是初始化,出棧,入棧,是否為空,是否為滿,取棧頂元素,取有效元素個數,遍歷。

**如果用靜態數組模擬的話,不需要銷毀棧,(我個人覺得 如果有誤,請指正) 清空的話,直接初始化就行。順序棧的示意圖如下:

 

不多說了,直接給代碼參考:

在這里我用拼音來代替函數,讓新手看得明白一點,我這里用的是結構體來生成一個棧,這個棧有一百個格子,還有一個top指針,大家結合示意圖來看就會很形象的。

 

# include<iostream>

using namespace std;

typedef struct

{

   int d[100];//定義一個長度為100的一維數組這里可以隨便設置長度

   int top;//棧頂指針

} Stack;

void chushihua(Stack * s);//初始化一個棧

bool em(Stack * s);//判斷是否為空

bool full(Stack * s);//判斷是否為滿

bool push(Stack * s,int a);//入棧

bool pop(Stack * s,int *a);//出棧

bool ding(Stack * s,int *a);//取棧頂元素

int len(Stack * s);//取有效元素個數

void bianli(Stack * s);//遍歷

 

 

 *****************************************************************

 

函數部分:

 

*****初始化一個棧*****

void chushihua(Stack * s);

{

   s->top=-1;  //結合示意圖讓top為-1  就是初始化這個棧

}

 

*****判斷是否為空 *****

bool em(Stack * s)

{

    if(-1==s->top)

       return true;

   else

       return  false;

}

 

*****判斷是否為滿 *****

bool full(Stack * s)

{

   if(99==s->top)//這里是因為數組的下標為零 所以對於一百來說 99就是最后一個“格子”

       return true;

   else

       return false;

}

 

*****入棧*****

bool push(Stack * s,int a)

{

   if(full(s))  //滿了就不能入棧

       return false;

   else

    {

       s->top++;  //結合圖  指針先加

       s->d[s->top]=a;//  再把數據存進對應的“格子”

       return true;

    }

}

 

 

 

*****出棧*****

bool pop(Stack * s,int *a)

{

   if(em(s))//  空的當然不能出棧

       return false;

   else

    {

       *a=s->d[s->top]; //把棧頂元素 付給 變量

       s->top--; //指針減一

       return true;

    }

}

 

 

 

 

*****取棧頂元素*****

這里只是取棧頂元素 不對棧有任何操作

bool ding(Stack * s,int *a)

{

   if(em(s)) //同理 空棧沒有元素 就不行

       return false;

   else

    {

       *a=s->d[s->top]; // 把棧頂的元素賦值即可

       return true;

    }

}

 

*****取有效元素長度*****

由圖我們可知,指針+1就是有效元素長度了

int len(Stack * s)

{

   return s->top+1;

}

 

*****遍歷*****

void bianli(Stack * s)

{

   int i;

   while(!em(s))//當不為空棧

    {

       pop(s,&i);  //我們就出棧並賦值

       cout<<i<<" "; // 打印

    }

   cout<<endl;//這是相當於C語言中的換行

}

***************************************************************** 

主函數部分(測試)

 

int main(void)

{

Stack s;
    int a,c;
    chushihua(&s);
    push(&s,1);
    push(&s,2);
    push(&s,3);
    push(&s,4);
    push(&s,5);
    ding(&s,&a);
  cout<<"有效長度為:"<<len(&s)<<" 棧頂元素為 "<<a<<endl;
    bianli(&s);
    return 0;

}

 如圖:

以上就是用數組模擬順序棧的過程,如果有什么問題或者bug,請在下方評論,我目前會天天上論壇的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM