c/c++语言开发共享C++详解实现Stack方法

栈简介栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录c++中栈的实现,可帮助提升编程能力与对栈的理解。stack模拟stack是一种容器适配器,专门在具有后进

栈简介

栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录c++中栈的实现,可帮助提升编程能力与对栈的理解。

stack模拟

stack是一种容器适配器,专门在具有后进先出的上下文环境中,其删除只能是在一端进行操作。

stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出 。

stack的底层原理可以是任何标椎的容器类模板或者一些特定的容器类,这些容器类应该支持以下操作:

  • empty:判空操作。
  • back:尾部元素获取。
  • push_back:尾部插入元素操作
  • pop_back:尾部删除元素操作。

模拟实现

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方法的文章就介绍到这了,更多相关c++ stack内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C++详解实现Stack方法,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1237639.html

(0)
上一篇 2022年9月10日
下一篇 2022年9月10日

精彩推荐