<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
棧本著先進後出的原則,來存取資料。作為資料結構中的一種,這裡不多介紹相關棧。僅以此文記錄C++中棧的實現,可幫助提升程式設計能力與對棧的理解。
stack是一種容器介面卡,專門在具有後進先出的上下文環境中,其刪除只能是在一端進行操作。
stack是作為容器介面卡被實現的,容器介面卡即是對特定類封裝作為其底層的容器,並提供一組特定的成員函數來存取其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出 。
stack的底層原理可以是任何標椎的容器類別範本或者一些特定的容器類,這些容器類應該支援以下操作:
模擬實現
template<class T, class Con = deque<T>> class stack { public: stack(); void push(const T& x) { _c.push_back(x); } void pop() { _c.pop_back(); } T& top() { return _c.back() } const T& top()const { return _c.back(); } size_t size()const { return _c.size(); } bool empty()const { return _c.empty(); } private: Con _c; };
直接上程式碼。
SeqStack.h
#pragma once #define MAX_SIZE 1024 #define TRUE 1 #define FALSE 0 typedef struct SEQSTACK { void *data[MAX_SIZE]; int size; }SeqStack; class MySeqStack { public: MySeqStack(); ~MySeqStack(); void init(); void pushStack(void *data); void * getTopStack(); void popStack(); int isEmpty(); int getSizeStack(); void clearStack(); private: SeqStack *m_stack; };
SeqStack.cpp
#include "SeqStack.h" #include <iostream> using namespace std; MySeqStack::MySeqStack() { } MySeqStack::~MySeqStack() { if (m_stack != nullptr) { delete m_stack; m_stack = nullptr; } } void MySeqStack::init() { m_stack = new SeqStack; if (m_stack == nullptr) { cout << "分配記憶體為空" << endl; } else { m_stack->size = 0; for (int i = 0; i < m_stack->size; ++i) { m_stack->data[i] = nullptr; } } } void MySeqStack::pushStack(void * data) { if (m_stack->size == MAX_SIZE) { return; } if (m_stack == nullptr) { return; } if (data == nullptr) { return; } m_stack->data[m_stack->size] = data; m_stack->size++; } void * MySeqStack::getTopStack() { if (m_stack == nullptr) { return nullptr; } if (m_stack->size == 0) { return nullptr; } return m_stack->data[m_stack->size-1]; } void MySeqStack::popStack() { if (m_stack == nullptr) { return ; } if (m_stack->size == 0) { return ; } m_stack->data[m_stack->size - 1] = nullptr; m_stack->size--; } int MySeqStack::isEmpty() { if (m_stack == nullptr) { return -1; } if (m_stack->size == 0) { return TRUE; } return FALSE; } int MySeqStack::getSizeStack() { return m_stack->size; } void MySeqStack::clearStack() { if (m_stack == nullptr) { return ; } for (int i = 0; i < m_stack->size; ++i) { m_stack->data[i] = nullptr; } m_stack->size = 0; }
main.cpp
#include <iostream> #include "SeqStack.h" using namespace std; typedef struct PERSON { char name[64]; int age; int score; }Person; void test() { MySeqStack *stack = new MySeqStack; stack->init(); Person p1 = { "hudf",3,56 }; Person p2 = { "akso",4,67 }; Person p3 = {"及家屬的",6,88}; Person p4 = { "口袋",7,98 }; Person p5 = { "husdh",8,34 }; stack->pushStack(&p1); stack->pushStack(&p2); stack->pushStack(&p3); stack->pushStack(&p4); stack->pushStack(&p5); while (stack->getSizeStack() > 0) { Person *data = (Person*)stack->getTopStack(); cout << "name = " << data->name << " age= " << data->age << " score=" << data->score << endl; stack->popStack(); } delete stack; stack = nullptr; } int main() { test(); return 0; } // 執行程式: Ctrl + F5 或偵錯 >「開始執行(不偵錯)」選單 // 偵錯程式: F5 或偵錯 >「開始偵錯」選單 // 入門使用技巧: // 1. 使用解決方案資源管理器視窗新增/管理檔案 // 2. 使用團隊資源管理器視窗連線到原始碼管理 // 3. 使用輸出視窗檢視生成輸出和其他訊息 // 4. 使用錯誤列表視窗檢視錯誤 // 5. 轉到「專案」>「新增新項」以建立新的程式碼檔案,或轉到「專案」>「新增現有項」以將現有程式碼檔案新增到專案 // 6. 將來,若要再次開啟此專案,請轉到「檔案」>「開啟」>「專案」並選擇 .sln 檔案
vs2017控制檯輸出程式。
到此這篇關於C++詳解實現Stack方法的文章就介紹到這了,更多相關C++ Stack內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45