簡單用陣列模擬順序棧(c )

2022-11-24 17:46:42 字數 3874 閱讀 9838

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

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

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

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

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

不多說了,直接給**參考:

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

# include

using namespace std;

typedef struct

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);

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

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)

}

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

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

int len(stack * s)

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

void bianli(stack * s)

cout<

}

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

主函式部分(測試)

int main(void)

如圖: