單鏈表實現棧

2021-06-27 22:16:03 字數 1760 閱讀 7783

程式設計實現下面的棧頂操作:

[cpp]view plain

copy

print?

class mydata  

;  

解析:顯然這裡需要實現棧的3種基本操作,即進棧、出棧以及判空。為了方便起見,使用單鏈表結構實現棧並且使用類的形式來定義站內及其節點。首先是節點類和棧類的具體定義,程式**如下:

[cpp]view plain

copy

print?

#include 

using

namespace std;  

class mydata  

//預設建構函式

mydata(int value) : data(value), next(null){}  //帶引數的建構函式

int data;               //資料域

mydata *next;           //下乙個節點

};  

class mystack  

//預設建構函式

void push(mydata data);     //進棧

void pop(mydata *pdata);    //出棧

bool isempty();             //是否為空

mydata *top;                //棧頂

};  

由於不能直接操作棧底,因此這裡沒有定義棧底的指標。在mystack的預設夠找函式中,把棧頂指標top置空,表示此時棧為空棧。

接下來是進棧、出棧以及判空的**實現,程式**如下:

[cpp]view plain

copy

print?

void mystack::push(mydata data)  

void mystack::pop(mydata *data)  

data->data = top->data;       //給傳出的引數賦值

mydata *p = top;            //臨時儲存原棧頂節點

top = top->next;         //移動棧頂,指向下乙個節點

delete p;                   //釋放原棧頂節點記憶體

}  bool mystack::isempty()    

mystack::push 函式表示進棧操作,它實際上就是在單鏈表的首部進行插入操作,並且top一直指向這個單鏈表的首部。

mystack::pop 函式表示出棧操作,它實際上就是在單鏈表的首部進行刪除操作,並且top一直指向這個單鏈表的首部,另外它還把刪除節點的資料儲存到data引數中。

mystack::isempty 函式非常簡單,當棧空時,top指標為null,而當棧中有節點時,top指向煉表頭,因此只需要用top與null進行比較即可。

下面是棧操作的測試**:

[cpp]view plain

copy

print?

int main()    

執行結果為:

[cpp]view plain

copy

print?

pop 3  

pop 2  

pop 1  

empty = 1  

press any key to continue

python用單鏈表實現棧

class lnode 節點的類 def init self,x self.data x self.next none class mystack 用鍊錶實現棧 def init self self.data none self.next none 判斷棧是否為空 def isempty self ...

單鏈表實現佇列和棧

單鏈表實現佇列很簡單,因為佇列是先入先出fifo,所以入隊就是在單鏈表的頭插入資料,出隊就是在單鏈表的尾得到資料,然後刪除。佇列的介面 public inte ce queue介面實現 public class queueimpl implements queue override public i...

Python 單鏈表實現棧操作

單鏈表實現棧操作,規定棧頂在鍊錶的頭部 如下 coding utf 8 class linkedstack class node def init self,element,next self.element element self.next next 棧方法 def init self self...