您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++鏈棧的實現代碼怎么寫”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++鏈棧的實現代碼怎么寫”吧!
鏈棧從概念上看是鏈表和棧的結合,含有棧先進后出的特性,也具有鏈表的動態增加節點的特性,這里相當于在鏈表的基礎上增加只能從一端操作,且保持先進后出的特性。將頭節點所在的那端看作棧頂,頭節點后緊接著的節點所在的位置,即第一個存儲數據的節點所在的位置為出棧入棧的位置。
直接上代碼:
LinkStack.h
#pragma once typedef struct LINKNODE { struct LINKNODE *pNext; }LinkNode; class LinkStack { public: LinkStack(); ~LinkStack(); void pushLinkStack(LinkNode *data); void popLinkStack(); LinkNode *getTopLinkStack(); int getSizeLinkStack(); void clearStack(); private: //這里可以不定義該類類型的指針,該類類型變量定義后只能使用單獨的初始化函數初始化, //不能用構造函數,會造成循環調用構造函數的死循環中 // LinkStack *m_LinkStack; LinkNode m_head; int m_size; };
LinkStack.cpp
#include "LinkStack.h" LinkStack::LinkStack() { m_size = 0; } LinkStack::~LinkStack() { } void LinkStack::pushLinkStack(LinkNode * data) { if (data == nullptr) { return; } data->pNext = m_head.pNext; m_head.pNext = data; m_size++; } void LinkStack::popLinkStack() { LinkNode *pDel = m_head.pNext; m_head.pNext = pDel->pNext; m_size--; } LinkNode * LinkStack::getTopLinkStack() { return m_head.pNext; } int LinkStack::getSizeLinkStack() { return m_size; } void LinkStack::clearStack() { m_head.pNext = nullptr; m_size = 0; }
main.cpp
#include <iostream> #include "LinkStack.h" using namespace std; typedef struct PERSON { LinkNode node; char name[64]; int age; }Person; void test() { LinkStack *pLinkStack = new LinkStack; Person p1, p2, p3,p4,p5; strcpy_s(p1.name,"hudh"); strcpy_s(p2.name,"呼呼"); strcpy_s(p3.name,"jidi"); strcpy_s(p4.name, "hus"); strcpy_s(p5.name, "akios"); p1.age = 34; p2.age = 45; p3.age = 67; p4.age = 67; p5.age = 78; pLinkStack->pushLinkStack((LinkNode*)&p1); pLinkStack->pushLinkStack((LinkNode*)&p2); pLinkStack->pushLinkStack((LinkNode*)&p3); pLinkStack->pushLinkStack((LinkNode*)&p4); pLinkStack->pushLinkStack((LinkNode*)&p5); while (pLinkStack->getSizeLinkStack() > 0) { Person *pData = (Person*)pLinkStack->getTopLinkStack(); cout << "name: " << pData->name << " age:" << pData->age << endl; pLinkStack->popLinkStack(); } delete pLinkStack; pLinkStack = nullptr; } int main() { test(); return 0; } // 運行程序: Ctrl + F5 或調試 >“開始執行(不調試)”菜單 // 調試程序: F5 或調試 >“開始調試”菜單 // 入門使用技巧: // 1. 使用解決方案資源管理器窗口添加/管理文件 // 2. 使用團隊資源管理器窗口連接到源代碼管理 // 3. 使用輸出窗口查看生成輸出和其他消息 // 4. 使用錯誤列表窗口查看錯誤 // 5. 轉到“項目”>“添加新項”以創建新的代碼文件,或轉到“項目”>“添加現有項”以將現有代碼文件添加到項目 // 6. 將來,若要再次打開此項目,請轉到“文件”>“打開”>“項目”并選擇 .sln 文件
vs2017 控制臺輸出程序。
棧是連續的存儲空間,故而在數量上會受到限制,而鏈棧打破了棧的內存空間的連續性,擴展性更強。
感謝各位的閱讀,以上就是“C++鏈棧的實現代碼怎么寫”的內容了,經過本文的學習后,相信大家對C++鏈棧的實現代碼怎么寫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。