当前位置: 首页 > news >正文

【C++/数据结构】栈

零.导言

        栈是一种数据结构,在后续的学习中可能经常使用,因此我们今天就来学习如何实现栈,以更好地使用它。


一.栈的实现

        栈的形式如下:

#include<iostream>
#include<cassert>

using namespace std;

typedef int StackDataType;

class Stack
{
public:
	Stack(int capacity = 4)
	{
		_arr = (StackDataType*)malloc(4 * sizeof(StackDataType));
		_capacity = capacity;
		_top = 0;
	}

	~Stack()
	{
		free(_arr);
		_capacity = _top = 0;
	}

	void Push(StackDataType n)
	{
		if (_capacity == _top)
		{
			int newcapacity = 2 * _capacity;
			StackDataType* tmp = (StackDataType*)realloc(_arr, newcapacity * sizeof(StackDataType));
			if (tmp == 0)
			{
				perror("reralloc fail!");
				exit(1);
			}
			_arr = tmp;
			_capacity = newcapacity;
		}
		_arr[_top++] = n;
	}

	bool isEmpty()
	{
		return _top == 0;
	}

	void Pop()
	{
		assert(!isEmpty());
		_top--;
	}

	StackDataType Top()
	{
		assert(!isEmpty());
		return _arr[_top - 1];
	}

private:
	StackDataType* _arr;
	int _capacity;
	int _top;
};

二.栈的相关解释

         在类(class)Stack 中,包含成员变量和成员函数;其中,_arr,_capacity,_top,都是私有的,不能在类外直接使用。而其成员函数,如Stack,~Stack,Push,Pop等等是公有的,可以在类外使用。

        Push的作用是在栈顶插入一个数据,Pop的作用是删除栈顶的一个数据,Top的作用是去除且不删除栈顶的数据。

        Stack~Stack 的作用是初始化和销毁栈。


三.栈的特性

        栈的特性是先进后出,即先存进的类容要等后存进的类容取出后才能取出。运用这个特性,我们可以便捷的解决很多问题。


四.相关链接

        【C++/数据结构】队列的模拟实现-CSDN博客


相关文章:

  • LeetCode 718 - 最长重复子数组
  • VADv2: 基于矢量表征和概率规划的E2E架构
  • 《英雄无敌3:死亡阴影》游戏秘籍
  • 使用sam-vit-base 模型在caltech256 数据集上实现图片召回
  • 算法题笔记(自用)——Python
  • PHP实现国密SM4算法,银行系统加密算法,JAVA和PHP可相互转换(附完整源码)
  • 矩阵基本概念
  • Spring Boot 自定义 Starter 完整实战手册
  • QT:Graphics View的坐标系介绍
  • 消息中间件应用的常见问题与方案?
  • JS :移除数组中的指定数据
  • LeetCode 热题 100 53. 最大子数组和
  • 老牌工具,16年依然抗打!
  • 计算机毕业设计SpringBoot+Vue.js林业产品推荐系统 农产品推荐系统 (源码+文档+PPT+讲解)
  • Github 2025-02-28 Java开源项目日报 Top9
  • Spring Boot spring-boot-maven-plugin 参数配置详解
  • 使用python解决硬币找零问题
  • jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案
  • python文件操作
  • 医脉云枢:中医药典籍知识图谱与非遗传承多维可视化系统
  • 商务部新闻发言人就出口管制管控名单答记者问
  • 商务部新闻发言人就暂停17家美国实体不可靠实体清单措施答记者问
  • 金正恩观摩朝鲜人民军各兵种战术综合训练
  • 生态环境保护督察工作条例对督察对象和内容作了哪些规定?有关负责人答问
  • 金俊峰已跨区任上海金山区委副书记
  • 耿军强任陕西延安市领导,此前任陕西省公安厅机场公安局局长