广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++详解实现Stack方法
  • 507
分享到

C++详解实现Stack方法

2024-04-02 19:04:59 507人浏览 八月长安
摘要

目录栈简介stack模拟示例代码开发环境运行结果栈简介 栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录c++中栈的实现,可帮助提升编程能力与

栈简介

栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++详解实现Stack方法

本文链接: https://www.lsjlt.com/news/152593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++详解实现Stack方法
    目录栈简介stack模拟示例代码开发环境运行结果栈简介 栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录C++中栈的实现,可帮助提升编程能力与...
    99+
    2022-11-13
  • C++如何实现Stack方法
    这篇“C++如何实现Stack方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++如何实现Stack方法”文章吧。sta...
    99+
    2023-07-02
  • C++ stack与queue模拟实现详解
    目录stack与queue模拟实现 stackqueue为什么选择deque作为stack和queue的底层默认容器总结stack与queue模拟实现 在stl中,stack(...
    99+
    2022-11-12
  • C++stack与queue使用方法详细讲解
    目录Stack的介绍和使用stack的默认定义的模板stack的使用queue的介绍和使用queue的默认定义的模板queue的使用Stack的介绍和使用 stack的文档介绍 st...
    99+
    2023-01-04
    C++ stack与queue C++ stack使用方法 C++ queue使用方法
  • C++Stack栈类模版实例详解
    目录1.栈的介绍2.栈实现3.代码测试总结1.栈的介绍 栈的实现方式分为3种 基于静态数组实现,内部预设一个很大的数组对象, 实现简单,缺点是空间受限。基于动态数组实现,内部预设一个...
    99+
    2022-11-13
  • C++详细讲解stack与queue的模拟实现
    目录容器适配器双端队列概念结构deque迭代器优缺点stack模拟queue模拟实现容器适配器 适配器是一种设计模式(设计模式是一套反复使用的、大部分人知道的代码设计经验的总结),该...
    99+
    2022-11-13
  • C++中Stack(栈)的使用方法与基本操作详解
    目录一、stack概述二、stack的基本操作1、头文件2、stack创建方式3、栈顶和栈底操作4、元素添加和删除5、栈的大小操作6、判断栈是否为空三、stack的实际应用一、sta...
    99+
    2023-05-19
    C++ Stack栈用法 C++ Stack C++ 栈
  • C++实现延迟的方法详解
    目录1、stl方式2、用boost实现, 没有用过3、sleep知识补充1、stl方式 std::this_thread::sleep_for(std::chrono::millis...
    99+
    2022-12-27
    C++实现延迟 C++延迟
  • C++模拟实现string的方法详解
    目录1.string 成员变量2.构造函数3.拷贝构造、赋值重载和析构函数1.拷贝构造2.赋值重载3.析构函数4.访问成员变量5.遍历1.下标+【】2.迭代器(iterator)3....
    99+
    2022-11-13
    C++实现string C++ string
  • C++简易版Tensor实现方法详解
    目录基础知识铺垫内存管理 allocate实现Tensor需要准备shape和storageTensor的设计方法(基础)Tensor的设计方法(更进一步)基础知识铺垫 缺省参数异常...
    99+
    2022-11-13
    C++ 简易Tensor C++ Tensor
  • C++ 超详细讲解stack与queue的使用
    目录stack介绍和使用模拟实现stack的使用例题最小栈栈的弹出压入序列逆波兰表达式求值queue模拟实现容器适配器deque简介priority_queue优先级队列priori...
    99+
    2022-11-13
  • C/C++中栈(stack)&堆(heap)详解及其作用介绍
    目录概述程序运行中的栈和堆堆和栈的差异申请方式和回收方式申请后系统的响应申请效率比较申请大小的限制堆和栈中的存储内容概述 栈 (stack) 是为执行线程流出的内存空间. 堆 (he...
    99+
    2022-11-12
  • C#实现悬浮窗口的方法详解
    目录一 悬浮窗口二 创建悬浮窗口1 实现细节2 细节三 圆形背景一 悬浮窗口 特点: ① 窗口一般较小,有时为不规则背景; ② 置顶显示; ③ 窗口支持拖动; ④ 一般用于程序状态显...
    99+
    2022-12-21
    C#悬浮窗口 C# 窗口
  • C#实现Word转换TXT的方法详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-22
    C# Word转TXT C# Word TXT
  • C++ OpenCV实现boxfilter方框滤波的方法详解
    目录box filter简单解释1. 暴力实现——四循环2. 行列分离3. 行列分离优化版代码box filter简单解释 box filter的作用很简单,...
    99+
    2022-11-13
    C++ OpenCV boxfilter盒式滤波 C++ boxfilter盒式滤波 C++ 盒式滤波
  • 基于C#实现Windows服务的方法详解
    目录前言Windows服务介绍创建Windows服务安装卸载Windows服务前言 在实际应用过程中,有时候我们希望开发的程序,不需要界面,直接开机就可以长时间运行,这时候,我们可以...
    99+
    2022-11-13
  • C#实现将PDF转为Excel的方法详解
    目录dll引用方法方法1方法2PDF转ExcelC#VB.NET通常,PDF格式的文档能支持的编辑功能不如office文档多,针对PDF文档里面有表格数据的,如果想要编辑表格里面的数...
    99+
    2022-11-13
  • C# OpenCV实现形状匹配的方法详解
    1. 多角度模板匹配测试效果如下图: 图1-1  图1-2 图1-3 正负角度均可正常识别,识别角度偏差<1° 2. 下面分享一下开发过程: a). R...
    99+
    2022-11-13
  • C#实现读写CSV文件的方法详解
    目录CSV文件标准文件示例RFC 4180简化标准读写CSV文件使用CsvHelper使用自定义方法总结项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件的解析。本文会介...
    99+
    2022-11-13
  • 详解C/C++实现各种字符转换方法合集
    目录一、std::string 和 std::wstring 互转1、直接声明std::wstring2、wstring_convert3、WideCharToMultiByte和M...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作