資料結構棧及其用法(C語言實現)

2021-07-01 23:53:11 字數 2045 閱讀 9548

一、棧的定義

棧是限定僅在表尾進行插入或刪除操作的線性表。一次對棧來說,表尾端有其特殊的含義,稱為棧頂,相應

的,表頭端成為棧底。不含元素的空表稱為空棧。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

二、棧的特點

棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則儲存資料

,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。所以,我們又稱棧為後進先出,即 last in first out,簡稱lifo結構。它的結構圖如下:

三、棧的基本操作

由於棧也是線性表,因此線性表的儲存結構對棧也適用,通常棧有順序棧和鏈棧兩種儲存結構,這兩種儲存結

構的不同,則使得實現棧的基本運算的演算法也有所不同。

順序棧,即棧的順序儲存結構是利用一組連續的儲存單元依次存放自棧底到棧頂的資料元素。在順序棧中有上

溢和下溢的概念。順序棧就想在乙個盒子裡放書一樣,你要拿書只能從最上面拿,如果書本放到盒子中,超過合資的頂部,那麼便是上溢。反正如果沒有書了,我們還去拿書,那麼便是下溢。

而鏈棧沒有上溢的限制,它只需要在頭部進行操作,我們在要儲存大量資料元素的時候才會用到鏈棧,一般情

況都是用順序棧。因此下面我給出順序棧的例子:

#include#include#includeusing namespace std;

const int stack_size = 100;

const int stackcreament = 10;

typedef struct sqstack

sqstack;

void initstack(sqstack *s) //構造乙個空棧

void destory(sqstack &s) //銷毀乙個棧

void clearstack(sqstack &s) //清空乙個棧

bool emptystack(sqstack &s) //判斷乙個棧是否為空

int lengthstack(sqstack &s) //返回這個棧的長度

int gettop(sqstack &s) //取棧頂元素

int push(sqstack &s, int data) //插入新的元素作為棧頂元素

*(s.top) = data;

s.top++;

}int pop(sqstack &s) //刪除棧頂元素

int main()

printf("\n");

if(emptystack(s) == 1)

printf("不為空\n");

int len = lengthstack(s);

printf("%d\n", len);

destory(s);

return 0;

}

棧的幾個典型應用的例子:數制的轉換, 括號匹配的檢查, 行編輯程式等等, 都是利用棧的先進後出特徵來進行求解的。

資料結構 棧(C語言實現)

定義 一種先進後出的資料結構 實現 標頭檔案 include include typedef struct node 定義節點 pnode,node typedef struct stack 定義棧 stack,pstack 棧的初始化 void init pstack ps else 判斷棧非空 ...

資料結構 順序棧 C語言實現

順序棧實現 include define size 50 static int data size 宣告陣列data,用於儲存棧中陣列 static int index 宣告變數index,用於表示棧中元素個數 初始化棧 void init 清理棧 void deinit 判棧滿 int full ...

資料結構之棧(C語言實現)

table of contents定義 實現定義結構 定義操作初始化棧 判斷棧是否為空 訪問棧頂元素 出棧 入棧 注 對線性表操作的限制有很多,上述只介紹兩種主流的限制,在資料結構中叫做棧和佇列。棧的概念比較抽象,舉個栗子 對,就是板栗的栗子 一群人依次走進乙個死胡同,寬度只夠通行乙個人。如果他們要...