C C 順序棧和鏈棧

2021-09-28 00:20:49 字數 2801 閱讀 1978

順序棧:

#include

using

namespace std;

#define maxsize 20

//棧的順序儲存型別

struct sqstack

s;//初始化棧

void

initstack

(sqstack &s)

//判斷棧是否為空

bool

isstackempty

(sqstack s)

//元素入棧

bool

push

(sqstack &s,

int x)

s.data[

++s.top]

= x;

return

true;}

//元素出棧

bool

pop(sqstack &s,

int&x)

//獲得棧中棧頂元素

bool

gettop

(sqstack s,

int&x)

void

printstack

(sqstack s)

cout<}int

main()

鏈棧——實際就是沒有頭節點的單鏈表

#include

#include

#include

#include

#include

using

namespace std;

/*鏈式儲存結構

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

由於棧只是棧頂在做插入和刪除操作,所以棧頂應該放在單鏈表的頭部。另外,都有了棧頂在頭部了,

單鏈表中的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭結點的。

對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有使用空間了。

對於空棧來說,鍊錶原來的定義是頭指標指向空,那麼鏈棧的空其實就是top=null。

*/typedef

struct stacknode stacknode,

* linktop;

//鏈棧的資料結構

typedef

struct linkstack linkstack;

//初始化

intinitlinkstack

(linkstack* stack)

stack-

>top =

null

; stack-

>count =0;

return1;

}//清空資料,釋放結點記憶體,實際上就是pop所有資料

intclearlinkstack

(linkstack* stack)

while

(stack-

>count)

return1;

}//判斷鏈棧是否為空

intemptylinkstack

(linkstack* stack)

return stack-

>count ==0?

1:0;

}//獲取元素個數

intgetlengthlinkstack

(linkstack* stack)

return stack-

>count;

}int

gettop

(linkstack* stack, stacknode*

* stacknode)

*stacknode = stack-

>top;

//將棧頂元素的指標返回,獲取指向可修改棧頂元素內容。

return1;

}//彈棧:棧頂指標指向要彈出元素前置結點,然後釋放彈出元素記憶體空間,然後count-1

intpop

(linkstack* stack,

int*e)

stacknode* node = stack-

>top;

*e = node-

>data;

stack-

>top = node-

>next;

//棧頂指標指向新的棧頂元素

free

(node)

;//釋放元素空間

stack-

>count--

;return1;

}//壓棧:先將壓入元素放入到煉表表中,然後再將棧頂指標指向壓入的元素,然後count+1.

intpush

(linkstack* stack,

int e)

stacknode* node =

(stacknode*

)malloc

(sizeof

(stacknode));

node-

>next = stack-

>top;

//將元素加入鍊錶中

node-

>data = e;

stack-

>top = node;

//棧頂元素指向壓入元素

stack-

>count++

;return1;

}int

printflinkstack

(linkstack* stack)

stacknode* node = stack-

>top;

while

(node)

return1;

}int

main()

順序棧和鏈棧

順序棧的儲存結構 define maxsize 100 typedef struct sqstack 順序棧的初始化操縱就是為順序棧動態分配乙個預訂大小的陣列空間 選乙個大小合適的桶 void initstack sqstack s 入棧操作就是指在棧頂插入乙個新的元素,新的元素為棧頂元素 給桶裡放...

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...

棧 順序棧 鏈棧

棧 順序棧 鏈棧 分別用順序表和煉表實現棧,完成入棧 出棧 窺探棧頂元素等操作 commom.h ifndef common h define commom h include include include include include define elemtype int void swap...