資料結構之棧

2021-09-12 02:50:06 字數 1638 閱讀 6483

棧是限定僅在表尾進行插入和刪除的線性表。

允許插入和刪除的一端叫棧頂,另一端叫棧底。不含有任何資料元素的棧叫空棧。棧又稱為後進先出的線性表。簡稱lifo結構。

//棧的抽象資料型別

adt 棧(stack)

data

同線性表。元素具有相同的型別,相鄰元素具有前驅和後繼關係。

operation

initstack(*s):初始化操作,建立乙個空棧s。

destroystack(*s):若棧存在,則銷毀它。

clearstack(*s):將棧清空。

stackempty(*s):若棧為空,返回true,否則返回false。

gettop(s,*e):若棧存在且非空,用e返回s的棧頂元素。

push(*s,e):若棧s存在,插入新元素e到棧s中並成為棧頂元素

pop(*s,*e):刪除棧s中棧頂元素,並用e返回其值。

stacklength(s):返回棧s的元素個數。

endadt

//棧的結構定義

typedef int selemtype; //selemtype型別根據實際情況而定。

typedef struct

sqstack;

//插入元素e為新的棧頂元素

status push(sqstack *s,selemtype e)

s->top++; //棧頂指標增加一

s->data[s->top] = e; //將新插入元素賦值給棧頂空間

return ok;

}//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回ok,否則返回error

status pop(sqstack *s,selemtype *e)

//兩棧共享空間的結構

typedef struct

sqdoublestack;

//插入元素e為新的棧頂元素

status push(sqdoublestack *s,selemtype e,int stacknumber)

//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回ok,否則返回error

status pop(sqdoublestack *s,selemtype *e,int stacknumber)

else if(stacknumber = maxsize)

return ok;

}

棧的鏈式儲存結構簡稱為鏈棧。

//鏈棧資料結構

typedef struct stacknode

stacknode,*linkstackptr;

typedef struct linkstack

linkstack;

//插入元素e為新的棧頂元素

status push(linkstack *s,selemtype e)

//若棧不空,則刪除s的棧頂元素,用e返回其值,並返回ok,否則返回error

status pop(linkstack *s,selemtype *e)

把直接呼叫自己或通過一系列的呼叫語句間接的呼叫自己的函式稱為遞迴函式。

資料結構之棧結構

棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...

資料結構之棧

4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...

資料結構之棧

資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...