棧的C 實現

2021-07-22 03:32:57 字數 2030 閱讀 9470

眾所周知,棧是一種最常用的資料結構,棧在實現上可以用陣列和結構體來實現,下面用結構體來實現棧。考慮到資料型別的通用性,這裡使用模板進行編寫,便於以後的學習過程中進行使用,不了解模板的同學,可以去網上了解一下c++的模板的使用。這裡有一篇關於c++模板類的部落格,可以先了解一下:

c++模板詳解

好了,下面開始進行**編寫。

首先,當然是引入標頭檔案,這裡將stdio.h和iostream都引用了,因為一不小心都用到了。

#include #include using namespace std;

引入標頭檔案後,開始宣告結構體,因為這裡是用結構體實現的。

template struct stacknode

;

t data用來儲存資料,然後宣告乙個結構體的指標,來指向下乙個元素。其次,用模板類來宣告乙個棧:

template class mystack

;

最開始的當然就是建構函式和析構函式,在建構函式中將top指向null,防止訪問出錯。push用來進行入棧操作,pop進行出站,stacktop用來獲取棧頂元素所儲存的資料,isempty判斷棧是否為空。下面開始進行**的詳細編寫。當然,首先要寫出建構函式和析構函式的**:

//初始化的時候,一定要將top置空,否則,當遍歷到棧底的時候,不為null,會繼續遍歷,造成空指標異常

template mystack::mystack()

//在析構函式中,釋放記憶體,所有的結構,都要進行記憶體釋放,這是必須的

template mystack::~mystack()

}

這裡在初始化的時候要將棧頂指標top置空,否則top會隨機產生乙個數值,在後來訪問的時候,會出現問題;其次是析構函式,將new出來的節點一一釋放,防止記憶體溢位。這裡用node指向當前的棧頂指標,然後,將top指向下乙個節點,然後將node釋放掉。上面的template 在每個方法前面都要寫一遍,否則方法無法識別t這種型別。由於使用了模板template,所以,在類和結構體定義的時候都要在後面加上。下面編寫其他的方法。

template void mystack::push(t data)

template void mystack::pop()

template bool mystack::isempty()

template t mystack::stacktop()

在push方法中,傳入乙個模板t型別的變數,然後定義乙個stacknode的節點,將node的data屬性賦值為傳入的data,這樣,資料就儲存在了節點中,然後,讓node的next指標指向已經存在的top結構體,將top賦值為node,這樣,就做到了top節點的移動,top就能夠永遠指向棧頂了。

其次是pop方法。在這裡宣告乙個node,指向top,然後將top指標下移,然後刪除node節點,就實現了對棧頂元素的刪除。

之後是isempty方法,該方法用來判斷棧是否為空。最後就是返回棧頂元素了。由於top就是指向棧頂,所以,直接返回top的data屬性就行了,好了,到這裡,就實現了乙個棧。下面對棧進行操作。

int main()

printf("\n");

while (!s->isempty())

system("pause");

return 0;

}

定義乙個棧型別的變數。這裡為了方便起見,其實只用了int型別的變數,實際上,可以使用很多其他型別,所以說,在這裡還是使用模板會方便很多,通用性強。用for迴圈的方式將資料存入棧中,然後,再用while迴圈取出棧中元素,當棧不為空的時候,就進行出棧操作,這裡要注意,如果在建構函式中不將top指向null的話,在這裡用while迴圈會報錯。最後,為了能夠看到列印的內容,使用system("pause");方法,防止視窗在列印出結果後直接關閉掉。

將上面寫的**直接複製到乙個檔案中,就能直接執行了。如果有什麼說的不嚴謹的地方,還希望大家指正。

C 棧的實現

2009 04 15 11 40 順序棧 seqential stack 就是用順序儲存方式儲存的棧。在下面順序棧的類定義中是用陣列儲存的。用stacka maxsize 儲存,maxsize是最大允許存放元素的個數。變數top表示棧頂部元素的位置,初始值為 1,表示棧空.我們首先給出順序棧的抽象資...

c 棧的實現

棧的實現 供學習c 人員使用 define stack size 10000 巨集定義 include 標頭檔案 using namespace std template struct node 無引數的的建構函式 node elemtypeitem,node link null 已知資料元素值和指...

棧的C 實現

棧的特點是先進後出 lifo 就像一疊盤子一樣,你只能從最上面取。這裡介紹幾個基本的功能 是否為空棧 empty 新增乙個元素 push 取最頂元素 top 彈出乙個元素 pop 輸出棧中的元素 out c 中有棧容器,用到時只需 include即可。這裡,我們自己建立乙個棧類,乙個int型的棧,再...