資料結構(C實現) 順序棧

2021-06-25 19:51:01 字數 2353 閱讀 6075

棧是限定僅在表的一端進行插入或刪除的純屬表,通常稱允許插入,刪除的一端為棧頂(top),相應在的,則稱另一端為棧底(bottom)。不含元素的棧則稱為空棧。

所設棧s=,則稱a1為棧底元素,an為棧頂元素。根據棧的定義可知,棧頂元素總是最後入棧並且最先出棧的;棧底元素總是最先入棧並且最後出棧的。即棧是按後進先出的原則進行的。因此,棧又稱為後進先出(lifo)的線性表。

而順序棧,即棧的順序儲存結構。它是利用一組位址連續的儲存單元依次存放自棧底到棧頂的資料元素,同時附設指標top指示棧頂元素在順序表中的位置。類似於順序表,用一維資料描述順序中的資料元素的儲存區域,而棧頂的位置則是隨著插入和刪除而變化的,通常將用乙個整數表示,將陣列下標為0的一端設定為棧底。

順序棧的型別描述:

#define maxsize 100 //棧的最大空間

//順序棧型別描述

typedef int elemtype;

typedef structsqstack;

在順序棧中,若將陣列下標為0的一端設為棧底,則當top的值為-1時,則表示棧空,每次向棧中壓入乙個元素時,首先便top的值加1,然後再把資料元素在於該位置。每次從棧中彈出乙個元素時,首先取出棧頂元素,然後使top的值減1,指示新的棧頂元素。

順序棧的基本操作:

1. 初始化棧init_sqstack(sqstack* s)

順序棧的初始化是要構造乙個空的順序棧。只需要將空順序棧s中的top置為-1,表示棧中目前並沒有資料元素,演算法的複雜度為o(1)。

//初始化棧

void init_sqstack(sqstack* s)

2.  判斷棧空isempty_sqstack(sqstack* s)

因為棧底設定在陣列的0下標處,即s->data[0]表示棧底元素,所以空棧時棧頂指標top=-1。若top=-1,則表示棧空,返回1,否則,則表示棧非空,返回0,演算法的複雜度為o(1)。 

//判斷棧空

int isempty_sqstack(sqstack* s)

3.  判斷棧滿isfull_sqstack(sqstack* s)

因為設定了棧的最大空間,所以在入棧時必須先判斷棧是否已滿,即當top= maxsize時,則表示棧滿,返回1,否則,則表示棧非空,返回0,演算法的複雜度為o(1)。

//判斷棧滿

int isfull_sqstack(sqstack* s)

4. 入棧 push_sqstack(sqstack* s,elemtype x)

首先,檢測棧是否已滿,若是,則輸出提示資訊,結束,否則,指標top值加1,將元素x存於棧頂位置即可,演算法的複雜度為o(1)。

//入棧操作

void push_sqstack(sqstack* s,elemtype x)

else

}

5. 出棧pop_sqstack(sqstack* s,elemtype* x)

首先,檢測棧是否為空,若是,則輸出提示資訊,結束,否則,將棧頂元素賦值給x,並將指標top減1,,演算法的複雜度為o(1)。

//出棧

void pop_sqstack(sqstack* s,elemtype* x)

else

*x = s->data[s->top--];

}

6. 讀取棧頂元素top_sqstack(sqstack* s,elemtype* x)

讀頂元素與出棧運算都是取得棧頂元素的值,二者的區別在於:讀棧頂元素時,棧頂指標不發生變化,僅讀取棧頂元素,而出棧還要將棧頂元素刪除,此時,棧頂指標也要發生變化,時間複雜度為o(1)

//讀取棧頂元素

void top_sqstack(sqstack* s,elemtype* x)

else

*x = s->data[s->top];

}

7. 輸出整個棧print_sqstack(sqstack* s)

輸出棧,只需要從棧頂開始讀取到棧底,將棧中所有的資料元素輸出即可。

//輸出整個棧

void print_sqstack(sqstack* s)

int length = s->top;

while(length > -1)

printf("%d\t",s->data[length--]);

printf("\n");

}

資料結構遍歷順序棧 資料結構 順序棧的實現

資料結構 順序棧的實現 1 快速開始 棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 先出,先入後出。除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。2 實現棧 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者...

資料結構 順序棧c

include include includeusing namespace std templateclass stacklist else cout endl return output 不帶引數的建構函式 templatestacklist stacklist 初始化最大容量為n的建構函式 t...

C 資料結構之棧 順序棧的實現

停更說明 國慶陪女朋友旅遊去了,並且發生了許多許多有趣的事情,有空再分享哈 這裡該來一條華麗麗的分割線 現在來說說資料結構中的棧,英文中好像是stack,翻譯過來棧其實是很形象的 棧的出口和入口相同,且只有乙個進出口 我們平時通過變數宣告 非new方法 申請來的儲存變數的方法其實就是棧記憶體。特點 ...