相關知識
鏈結儲存的棧
棧的儲存也可以採用鏈結儲存的方式來實現。下面給出了一種基於鏈結儲存的棧的實現方案:
如圖 1 所示:該棧儲存了 3 個元素 ,其中 56 是棧頂元素。
這種實現方案中與棧相關的兩個屬性元素top和len介紹如下:
top: 指向棧頂結點的指標;
len: 棧中結點的個數。
特別說明:鏈結儲存方式下,煉表頭結點作為棧頂結點,用指標top指向棧頂結點,棧結點個數由len給出。
基於top和len組織成的棧結構如下:
struct linkstack
;
為了討論簡單,我們假設棧元素的資料型別為整數:
typedef
int t;
// 棧元素的資料型別
同時,每個結點的結構定義為:
struct lnode
;
據此,只要給定指向該結構的一指標ls,就可對棧進行出棧操作。
進行出棧操作時,將指標top指向的當前棧頂元素 56 出棧,出棧後top指向下乙個棧頂元素 77,這時的狀態則如圖 2 所示。
本關任務是實現 step2/lnkstack.cpp 中的ls_isempty、ls_length、ls_push、ls_pop和ls_top五個操作函式,以實現判斷棧是否為空、求棧的長度、進棧、出棧以及獲取棧頂元素等功能。具體要求如下:
ls_isempty:判斷棧是否為空,若棧為空,則返回true,否則返回false;
ls_length:獲取鏈式棧的長度;
ls_push:將元素 x 進棧,若滿棧則無法進棧,返回false,否則返回true;
ls_pop:若出棧成功(棧不為空),則返回true;否則(空棧),返回false;
ls_top:獲取棧頂元素;
輸入輸出格式請參見後續說明及測試樣例。
輸入輸出說明:
輸入格式:
輸入多個操作:如果輸入 「push」 ,則後面跟乙個數 x ,表示 x 進棧;如果輸入 「pop」 ,表示出棧操作;如果輸入 「end」 ,表示輸入結束。
輸出格式:
輸出棧的長度,然後從棧頂到棧底依次輸出各元素。
以下是平台對step2/main.cpp的測試樣例:
樣例輸入:
push 56
push 15
push 12
push 13
popend
樣例輸出
stack length: 3
the stack (from top to bottom): 12 15 56
#include
#include
#include
"lnkstack.h"
/*建立棧*/
linkstack*
ls_create()
/*釋放棧*/
void
ls_free
(linkstack* ls)
free
(ls);}
/*將棧變為空棧*/
void
ls_makeempty
(linkstack* ls)
ls->top =
null
; ls-
>len =0;
}/*判斷棧是否為空*/
bool
ls_isempty
(linkstack* ls)
/*獲取棧的長度*/
intls_length
(linkstack* ls)
/*將x進棧*/
void
ls_push
(linkstack* ls, t x)
/*出棧。出棧元素放入item;如果空棧,將返回false*/
bool
ls_pop
(linkstack* ls, t& item)
item = node-
>data;
ls->top = node-
>next;
ls->len --
;free
(node)
;return
true;}
/*讀棧頂元素放入item。如果空棧,將返回false*/
bool
ls_top
(linkstack* ls, t& item)
item = node-
>data;
return
true;}
/*從棧頂到棧底列印各結點資料*/
void
ls_print
(linkstack* ls)
printf
("the stack (from top to bottom):");
lnode* curr=ls-
>top;
while
(curr)
// printf("\n");
}
資料結構與演算法 實現乙個鏈結儲存的棧
鏈結儲存的棧實現檔案 include include include lnkstack.h 建立棧 linkstack ls create 釋放棧 void ls free linkstack ls free ls 將棧變為空棧 void ls makeempty linkstack ls ls t...
實現乙個順序儲存的棧(資料結構與演算法 棧)
相關知識 棧的基本概念 棧是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算,這一端被稱為棧頂。棧既可以採用順序儲存,也可以採用鏈結儲存來實現。下面給出了一種基於順序儲存的棧的實現方案 如圖 1 所示 該棧儲存了 4 個元素 其中 12 是棧頂元素。這種實現方案將棧元素儲存在一片連續...
資料結構 兩個佇列實現乙個棧
用兩個棧實現乙個佇列,這個問題與 兩個佇列實現乙個棧 原理非常的相似。只要你明白了 兩個佇列實現乙個棧 的原理,相信聰明的你,就會明白這個問題只是它的變種,所有的異或就會迎刃而解的。這裡大家可以參考我的部落格 如下 define crt secure no warnings 1 includeusi...