
栈简介栈本着先进后出的原则来存取数据。作为数据结构中的一种这里不多介绍相关栈。仅以此文记录C中栈的实现可帮助提升编程能力与对栈的理解。stack模拟stack是一种容器适配器专门在具有后进先出的上下文环境中其删除只能是在一端进行操作。stack是作为容器适配器被实现的容器适配器即是对特定类封装作为其底层的容器并提供一组特定的成员函数来访问其元素将特定类作为其底层的元素特定容器的尾部(即栈顶)被压入和弹出 。stack的底层原理可以是任何标椎的容器类模板或者一些特定的容器类这些容器类应该支持以下操作empty:判空操作。back:尾部元素获取。push_back尾部插入元素操作pop_back:尾部删除元素操作。模拟实现123456789101112131415161718192021222324252627282930313233templateclassT,classCon dequeTclassstack{public:stack();voidpush(constT x){_c.push_back(x);}voidpop(){_c.pop_back();}T top(){return_c.back()}constT top()const{return_c.back();}size_tsize()const{return_c.size();}boolempty()const{return_c.empty();}private:Con _c;};示例代码直接上代码。SeqStack.h1234567891011121314151617181920212223#pragma once#define MAX_SIZE 1024#define TRUE 1#define FALSE 0typedefstructSEQSTACK {void*data[MAX_SIZE];intsize;}SeqStack;classMySeqStack{public:MySeqStack();~MySeqStack();voidinit();voidpushStack(void*data);void* getTopStack();voidpopStack();intisEmpty();intgetSizeStack();voidclearStack();private:SeqStack *m_stack;};SeqStack.cpp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100#include SeqStack.h#include iostreamusingnamespacestd;MySeqStack::MySeqStack(){}MySeqStack::~MySeqStack(){if(m_stack ! nullptr){deletem_stack;m_stack nullptr;}}voidMySeqStack::init(){m_stack newSeqStack;if(m_stack nullptr){cout 分配内存为空 endl;}else{m_stack-size 0;for(inti 0; i m_stack-size; i){m_stack-data[i] nullptr;}}}voidMySeqStack::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){returnnullptr;}if(m_stack-size 0){returnnullptr;}returnm_stack-data[m_stack-size-1];}voidMySeqStack::popStack(){if(m_stack nullptr){return;}if(m_stack-size 0){return;}m_stack-data[m_stack-size - 1] nullptr;m_stack-size--;}intMySeqStack::isEmpty(){if(m_stack nullptr){return-1;}if(m_stack-size 0){returnTRUE;}returnFALSE;}intMySeqStack::getSizeStack(){returnm_stack-size;}voidMySeqStack::clearStack(){if(m_stack nullptr){return;}for(inti 0; i m_stack-size; i){m_stack-data[i] nullptr;}m_stack-size 0;}main.cpp123456789101112131415161718192021222324252627282930313233343536373839404142434445#include iostream#include SeqStack.husingnamespacestd;typedefstructPERSON {charname[64];intage;intscore;}Person;voidtest(){MySeqStack *stack newMySeqStack;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 >开发环境vs2017控制台输出程序。运行结果到此这篇关于C详解实现Stack方法的文章就介绍到这了