数据结构(Data Structure)——1、栈(Stack)

2023-05-16

栈的介绍

栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。

  栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

  栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!

栈的特性:只在表的一端访问元素的表,其元素只能从栈顶端增加或删除。设计存放那些只能从一端访问的元素。

   增加(压入push):栈顶增加元素

  删除(弹出pop):栈顶删除元素

   后进先出原则(LIFO

   栈满:栈已达到处理元素个数的最大值。 栈空:无法从栈中删除元素。

代码示例:

1、SeqStack.h文件

#define MAXSIZE   0xFFFF
template<class type>
class SeqStack
{
	int   top;     //栈顶指示
	type *stacka;  //数组名
	int   maxsize; //栈最大可容纳元素个数
public:
	SeqStack();
	SeqStack(int size);
	SeqStack(type data[], int size);
	virtual ~SeqStack()
	{
		delete[]stacka;
	}
	void Push(const type &item);    //元素item压栈
	type Pop();        //数据元素出栈,返回之
	type GetTop();     //读栈顶数据元素并返回

	int Empty()const
	{
		return top == -1;      //判断栈是否为空
	}

	int Full()const
	{
		return top == maxsize - 1;  //判断栈是否为满
	}

	void Clear()
	{
		top = -1;        //清空栈
	}
};

template<class type>
SeqStack<type>::SeqStack():top(-1), maxsize(MAXSIZE)
{
	stacka = new type[maxsize];
	if (stacka == NULL){
		cerr << "动态存储分配失败!" << endl;
		exit(1);
	}
}
template<class type>
SeqStack<type>::SeqStack(int size) :
top(-1), maxsize(size)
{
	stacka = new type[maxsize];    //创建存储栈的数组
	if (stacka == NULL){      //分配不成功
		cerr << "动态存储分配失败!" << endl;
		exit(1);
	}
}
template<class type>
SeqStack<type>::SeqStack(type data[], int size) :
top(-1), maxsize(size)
{
	stacka = new type[maxsize];    //创建存储栈的数组
	if (stacka == NULL){      //分配不成功
		cerr << "动态存储分配失败!" << endl;
		exit(1);
	}
	for (int i = 0; i<maxsize; i++){
		stacka[i] = data[i];
	}

	top += maxsize;
}

template<class type>
void SeqStack<type>::Push(const type& item)
{
	//若栈已满,出错处理;否则把元素item压栈
	if (Full()){
		cerr << "栈已满,不能压栈!" << endl;
		exit(1);
	}
	//这里我们采用指针先移动,然后再对元素进行操作的方式
	top++;

	stacka[top] = item;
}

template<class type>
type SeqStack<type>::Pop()
{
	if (Empty()){
		cerr << "栈已空!" << endl;
		exit(1);
	}
	//栈不空,取栈顶元素
	type data = stacka[top];
	top--;
	//返回栈顶元素
	return data;
}

template<class type>
type SeqStack<type>::GetTop()
{
	//若栈不空,返回栈顶元素的值
	if (Empty()){
		cerr << "栈空!" << endl;
		exit(1);
	}
	//返回栈顶元素的值
	return stacka[top];
}

2、main.c文件

#include <iostream>
#include "SeqStack.h"
using namespace std;

int main()
{
	int data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	SeqStack<int> stack(data, 10);
	while (!stack.Empty()){
		cout << stack.Pop() << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

3、代码运行结果



















分析:程序如实实现了栈的创建,插入,删除等操作,代码中通过使用类模板,实现了面向对象编程的思想。


Next:数据结构(Data Structure)——2、队列(Queue)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构(Data Structure)——1、栈(Stack) 的相关文章

  • 大规模集群故障处理

    我相信每一个集群管理员 xff0c 在长期管理多个不同体量及应用场景的集群后 xff0c 都会多少产生情绪 其实这在我看来 xff0c 是一个很微妙的事 xff0c 即大家也已经开始人性化的看待每一个集群了 既然是人性化的管理集群 xff0
  • ADRC调试经验(已调通)

    自抗扰控制的组成 有关自抗扰的相关内容 xff0c 韩老师在他的一系列论文中已经描绘的非常清晰了 xff0c 具体资料可以点击这里下载 其中对于TD和ESO这两个部分其实是比较好调节的 xff0c 很容易就能够获得很好的效果 比较难调节的参
  • 浏览器的同源策略

    https developer mozilla org zh CN docs Web Security Same origin policy 这篇翻译不完整 请帮忙从英语翻译这篇文章 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个
  • centos简单解决报错-bash 未找到命令

    centos报错 bash 未找到命令 在使用纯净镜像的时候 经常找不到一些额外的命令 想用但是不知道怎么安装 拿telnet 和netstat 举例 telnet yum provides telnet 这里只需要 yum y span
  • [问题已处理]-docker build出来的镜像没有更新成功

    导语 xff1a 记录一下docker build镜像的坑 如果修改代码文件的话 xff0c docker build 有时候会不替换文件 xff0c 而会使用cache xff0c 导致代码文件没有更新 第一次构建镜像 产生了cache
  • [问题已处理]在docker中使用nohup

    导语 xff1a docker运行容器是否能使用nohup 以下是测试在不同的情况下使用nohup 先启动一个容器 仅看进程的pid号参考 docker run it rm ubuntu 16 04 bash sleep 5 amp amp
  • k8s-集群搭建的三种方式和区别,kubeadm、minikube,二进制包

    k8s 集群搭建的三种方式 xff0c 目前主流的搭建k8s集群的方式有kubeadm minikube xff0c 二进制包 kubeadm 是一个工具 xff0c 用于快速搭建kubernetes集群 xff0c 目前应该是比较方便和推
  • 精确算法、启发式算法、元启发式算法及增长方式浅析

    组合优化问题是通过用数学方法的研究去寻找离散事件的最优编排 分组 次序或筛选等 xff0c 其变量是离散分布的 对于结构化的组合优化问题 xff0c 其解空间的规模能够得到控制 xff0c 对于这样的问题 xff0c 使用精确算法就可以求得
  • 重构一个快不可维护的项目

    历史原因 xff0c 接手了一个一直堆业务逻辑 xff0c 没有重构过的项目 xff0c 简单看了一下代码就感觉麻头皮 xff0c 满目都是一个方法里面大段的代码 xff0c 阅读起来极度困难 可以合并的类没有合并 xff0c 导致一个请求
  • 芯片端子的多路复用

    嵌入式软件的开发 xff0c 经常要和芯片打交道 xff0c 和个人电脑的通用平台的CPU使用X86或X64架构不同 xff0c 嵌入式电子产品使用的主控芯片是各种各样的 xff0c 从8051单片机 xff0c 到ARM Cortex M
  • 树莓派学习笔记——获取树莓派CPU温度

    0 前言 本文通过文件操作读取树莓派CPU温度 xff0c 在linux系统中任何设备的操作都被抽象成为文件读写 xff0c 通过读取 sys class thermal thermal zone0 temp文件中的内容便获得树莓派CPU的
  • DHT11温湿度传感器

    1 封装信息 2 DHT11通讯总介 微处理器与DHT 11之间的通讯和同步 xff0c 采用单总线数据格式 xff0c 一次通讯时间4ms左右 xff0c 数据分小数部分和整数部分 一次完整的数据传输为40bit xff0c 高位先出 数
  • does not support raise

    This plugin does not support propagateSizeHints This plugin does not support raise arm平台界面无法显示 xff0c 有如上日志 该系统上安装的是5 11
  • docker jvm 内存限制

    docker 容器提供了相关的内存限制 具体使用方式如 xff1a m 512m 完整例子 docker run rm m 512m e JAVA OPTS 61 Xmx512m tomcat 8 通过 m 进行限制 但是在实际应用重 xf
  • DES加密算法—实现(C语言)

    http www iteye com topic 478024 DES xff08 Data Encrypt Standard数据库加密标准 xff09 是迄今为止使用最广泛的加密体制 初学信息安全的新生 xff0c 一般都会被老师要求实现
  • 国家运输ITS通信协议(NTCIP)简介

    国家智能交通系统工程技术研究中心 张北海 中交国通智能交通系统技术有限公司 肖媛媛 1 NTCIP的发展历程 NTCIP National Transportation Communications for ITS Protocol 是美国
  • linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能

    本文转载自链接 xff1a http blog csdn net chenzba article details 51224715 xfeff xfeff 最近使用redis的c接口 hiredis xff0c 使客户端与redis服务器通
  • 推荐ucos-II 3本参考书 经典

    在这里给大家推荐三本学习ucos的必看书籍 1 xff08 比较难买 xff09 嵌入式实时操作系统uc os II教程 西安电子科技大学出版 这本书对UCOS的源代码分析的非常清楚 比作者原著 在某种程度上要好 xff0c 这本书对关键的
  • Windbg查看调用堆栈(k*)

    https www 52pojie cn thread 664189 1 1 html 无论是分析程序崩溃原因 xff0c 还是解决程序hang问题 xff0c 我们最常查看的就是程序调用堆栈 学会windbg调用堆栈命令 xff0c 以及
  • POV写作手法

    POV xff08 Point of View xff09 xff0c 一种写作手法 xff0c 即 视点人物写作手法 xff0c 在叙述同一件事可以自由选取最丰厚的角度 xff0c 大大加强了叙述的灵活性 xff0c 在讲述故事的同时作者

随机推荐

  • Go语言学习资料整理

    整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南 A Tour of Go Go语言圣经 xff08 中文版 xff09 Effective Go中文版 Go Web编程 build web applicati
  • 更好的内存管理-jemalloc

    今年年初由于facebook而火起来的jemalloc广为人之 xff0c 但殊不知 xff0c 它在malloc界里面很早就出名了 Jemalloc的创始人Jason Evans也是在FreeBSD很有名的开发人员 此人就在2006年为提
  • Windows上安装Net-SNMP5.7

    本文简要记录了在Windows上安装 net snmp 5 7 1的步骤 xff0c 最新的源码包可上net snmp官方网站下载 安装net snmp 5 7 1之前需要先安装 VS2010Win32 OpenSSL v1 0 1fAct
  • Redis源码分析(二)--结构体分析(1)

    继上次的redis源码分析 一 之后 xff0c 本人开始订制着一份非常伟大的计划 啃完redis源代码 xff0c 也对他进行了切块划分 xff0c 鉴于本人目前对他的整个运行流畅还不特别清楚的情况下 xff0c 所以决定第一个要解决的就
  • Redis源码分析(三)---dict哈希结构

    昨天分析完adlist的Redis代码 xff0c 今天马上马不停蹄的继续学习Redis代码中的哈希部分的结构学习 xff0c 不过在这里他不叫什么hashMap xff0c 而是叫dict xff0c 而且是一种全新设计的一种哈希结构 x
  • 【原创】关于wince OS开发面试问题的总结系列之Bootloader

    参考资料 xff1a 1 Windows CE 工程事件完全解析 by xff1a 李大为 2 Windos CE 实用开发技术 by xff1a 张冬泉 等 3 Windows Embedded CE 6 0 Fundamentals 4
  • UML--类之间的五种关系

    UML中的关系 xff08 Relationships xff09 主要包括5种 xff1a 关联关系 聚合关系 依赖关系 泛化关系 实现关系 1 关联 xff08 Association xff09 关系 关联关系是一种结构化的关系 xf
  • stm32并行驱动LCD12864,最简洁代码让你的屏幕亮起来

    前言 这两天因为一个项目的需要 xff0c 所以又用到了LCD12864这个模块 好久都没用到这玩意了 xff0c 感觉这东西好像要被淘汰的样子 xff0c 没想到现在又要用到 xff0c 简直了 记得上次用还是大一参加机器人比赛的时候 x
  • GCC编译过程,了解编译原理

    说明 xff1a 这篇文件是在读 程序员的自我修养 链接 装载与库 的一点笔记 xff0c 权当时学习的记录 1 GCC编译过程分解 以HelloWorld程序为例 2 预编译 规则 xff1a 命令 xff1a gcc E XXX c o
  • 谨以此文献给正在面临选择的你

    我是2011届的考生 xff0c 当我从我们学校的的分数公布栏上看到自己的分数时 xff0c 我感觉我的世界都变成了灰色 xff0c 一切都暗淡无光 在那段时间里 xff0c 我思考了很多的问题 xff0c 诸如要不要去复读 去哪一所学校
  • Linux - Ubuntu里安装Python的包

    在Ubuntu中 xff0c apt install python xff0c 默认是安装python2 要安装python3 要使用apt install python3 安装后运行python python2 xff0c 调用的都是py
  • 第二章:STM32MxCube配置串口

    基于上一次将第一章 xff1a STM32MxCube 基本使用方法 本章直接讲叙述STM32配置串口2的 查看STM32F407电路图 xff1a 可得USART2接在PA2 PA3 下面新建STM32MxCube工程 xff0c 开始配
  • 浅述数字化与信息化

    数字化 和 信息化 是两个被用 滥 了的词 xff0c 但是搞 IT 的一定要真正理解这两个词 xff0c 才能在正确的场合使用在正确的地方 数字化 xff08 to digitize xff09 简单的说就是用计算机技术来代替一些传统手动
  • 飞书扫码登录网页

    二维码 SDK 接入文档 最后更新于 2022 06 14 概述 为了实现在网页内部完成授权登录的流程 xff0c 避免跳转到飞书登录页 xff0c 保证流畅的体验 xff0c 可以接入二维码 SDK 将飞书登录的二维码嵌入到网页中 当用户
  • make命令参数详解

    Make命令本身可带有四种参数 xff1a 标志 宏定义 描述文档名和目标文档名 其标准形式为 xff1a Make flags macro definitions targets Unix系统下标志位flags选项及其含义为 xff1a
  • c语言汉诺塔问题详解

    一 前言 汉诺塔 xff08 Tower of Hanoi xff09 xff0c 又称河内塔 xff0c 是一个源于印度古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 xff0c 在一根柱子上从下往上按照大小顺序摞着64片黄金
  • 阿里云服务器的使用

    阿里云服务器的使用 外网ip 39 108 98 xxx xff08 linux xff09 ubuntu16 04 root root密码 putty ssh工具 xshell ssh scp 登录到阿里云服务器上 xff08 ubunt
  • 项目如何介绍

    谈谈XXX项目 分析 xff1a 考官通过看你的简历或者你的介绍来了解你所做的项目 xff0c 那么考官肯定想更详细的了解您的项目 xff0c 看是不是与你的简历写的项目经验一致 也就是考核你是否具有真实的项目经验 一般来说 xff0c 在
  • K8S的flannel组件容器网络分析

    kubernetes的网络通信可以分为一下几个部分 xff1a pod内部的容器间通信pod间通信pod与service之间网络通信kubernetes外部与service之间的网络通信 理论 xff1a 1 pod内部的容器间通信 kub
  • 数据结构(Data Structure)——1、栈(Stack)

    栈的介绍 栈 xff08 stack xff09 在计算机科学中是限定仅在表尾进行插入或删除操作的线形表 栈是一种数据结构 xff0c 是只能在某一端插入和删除的特殊线性表 它按照先进后出的原则存储数据 xff0c 先进入的数据被压入栈底