您好,登錄后才能下訂單哦!
這篇“C++如何實現(xiàn)Stack方法”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++如何實現(xiàn)Stack方法”文章吧。
stack是一種容器適配器,專門在具有后進先出的上下文環(huán)境中,其刪除只能是在一端進行操作。
stack是作為容器適配器被實現(xiàn)的,容器適配器即是對特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來訪問其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出 。
stack的底層原理可以是任何標(biāo)椎的容器類模板或者一些特定的容器類,這些容器類應(yīng)該支持以下操作:
empty:判空操作。
back:尾部元素獲取。
push_back:尾部插入元素操作
pop_back:尾部刪除元素操作。
模擬實現(xiàn)
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 << "分配內(nèi)存為空" << 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 或調(diào)試 >“開始執(zhí)行(不調(diào)試)”菜單 // 調(diào)試程序: F5 或調(diào)試 >“開始調(diào)試”菜單 // 入門使用技巧: // 1. 使用解決方案資源管理器窗口添加/管理文件 // 2. 使用團隊資源管理器窗口連接到源代碼管理 // 3. 使用輸出窗口查看生成輸出和其他消息 // 4. 使用錯誤列表窗口查看錯誤 // 5. 轉(zhuǎn)到“項目”>“添加新項”以創(chuàng)建新的代碼文件,或轉(zhuǎn)到“項目”>“添加現(xiàn)有項”以將現(xiàn)有代碼文件添加到項目 // 6. 將來,若要再次打開此項目,請轉(zhuǎn)到“文件”>“打開”>“項目”并選擇 .sln 文件
vs2017控制臺輸出程序。
以上就是關(guān)于“C++如何實現(xiàn)Stack方法”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。