数据结构-栈的一些基础操作c++代码

堆栈(简称栈) 是一种操作受限的线性表,只允许在表的同一端进行插入和删除操作,且这些操作是按先进后出的原则进行的。

template <class T>
struct SLNode
{
	T data;                     //数据域
	SLNode<T> *next;            //指针域

	SLNode(SLNode *nextNode = NULL)                      //构造函数
	{
		next = nextNode;
	}

	SLNode(const T &item, SLNode *nextNode = NULL)      //构造函数
	{
		data = item;
		next = nextNode;
	}
};

//顺序栈
template <class T>
class AStack
{
	public:
		AStack(int MaxStackSize)                              //构造函数
		{
			size = MaxStackSize;
			stackArray = new T[MaxStackSize];
			top = -1;
		}

		~AStack()                              //析构函数
		{
			delete []stackArray;
		}

		bool Push(const T &item)              //向栈顶压入一个元素
		{
			if (IsFull())
			{
				cout << "Pushing into a full stack!" << endl;
				return false;
			}
			stackArray[++top] = item;
			return true;
		}

		bool Pop(T &item)                     //从栈顶弹出一个元素
		{
			if (IsEmpty())
			{
				cout << "Poping from an empty stack!" << endl;
				return false;
			}
			item = stackArray[top--];
			return true;
		}

		bool Peek(T &item) const              //存取栈顶元素
		{
			if (IsEmpty())
			{
				cout << "Peeking from an empty stack!" << endl;
				return false;
			}
			item = stackArray[top];
			return true;
		}

		int IsEmpty() const                    //检测栈是否为空
		{
			return top == -1;
		}

		int IsFull() const                     //检测是否满栈
		{
			return top == size-1;
		}

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

	private:
		int size;                              //数组的规模
		T *stackArray;                         //存放堆栈元素的数组
		int top;                               //栈顶所在数组元素的下标
};

//链式栈类LStack的定义和实现
template <class T>
class LStack
{
	public:
		LStack()                             //构造函数
		{
			top = NULL;
		}

		~LStack()                           //析构函数
		{
			clear();
		}

		void clear()                       //清空栈
		{
			SLNode<T> *temp;
			while(!IsEmpty())
			{
				temp = top->next;
				delete top;
				top = temp;
			}
		}

		bool Push(const T &item)          //向栈顶压入一个元素
		{
			top = new SLNode<T>(item, top);
			return true;
		}

		bool Pop(T &item)                 //从栈顶弹出一个元素
		{
			if(IsEmpty())
			{
				cout << "Poping from an empty stack!" << endl;
				return false;
			}
			item = top->data;
			SLNode<T> *temp = top;
			top = top->next;

		}

		bool Peek(T &item) const         //读取栈顶元素
		{
			if(IsEmpty())
			{
				cout << "Poping from an empty stack!" << endl;
				return false;
			}
			item = top->data;
			return true;
		}

		int IsEmpty() const
		{
			return top == NULL;
		}
	private:
		SLNode<T> *top;

};

时间: 2024-12-14 06:35:21

数据结构-栈的一些基础操作c++代码的相关文章

数据结构-线性表的一些基础操作 c++代码

//线性表的顺序存储结构 template <class T> class Linearlist { public: Linearlist(int MaxListSize == 10); ~Linearlist() { delete []element; } bool IsEmpty() const { return length == 0; } bool IsFull() const { return length == MaxSize; } int Length() const { ret

【ADO.NET基础-GridView】GridView的编辑、更新、取消、删除以及相关基础操作代码

代码都是基础操作,后续功能还会更新,如有问题欢迎提出和提问....... 前台代码: <asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" AutoGenerateColumns="Fal

栈的基础操作——2,8,16进制的入栈——数组类型定义

#define stack_init_size 100 #define stackincrement 10 typedef int ElemType; typedef int status; const status error=0; const status ok=1; const status overflow=-2; const int MAXSIZE = 100; typedef struct { ElemType elem[MAXSIZE]; int top; } SqStack; s

计算机基础-数据结构-栈

基本介绍 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 .常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等 栈 是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈低不允许操作. 栈的特点 先进后出,从栈顶放入元素的操作叫入栈,去出元素叫出栈 适用场景 栈的结构像集装箱,先放进去的后拿出来,所以,常常用来实现递归功能的场景,例如斐波那契数列 原文地址:https://www.cnblogs.com/issac-fan/p/stack

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

01.数据结构概念与算法基础

数据结构概念与算法基础 一.数据结构概念 1.数据:是描述客观事务的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 2.数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录.比如畜类中,牛.马.羊都属于数据元素. 3.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.比如人这样的数据元素,可以有眼.耳.鼻等数据项. 4.数据对

Python全栈开发【基础四】

Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 匿名函数 lambda表达式:对于简单的函数,存在一种简便的表示方式,即lambda表达式 1 #这段代码 2 def calc(n): 3 return n**n 4 print(calc(10)) 5 6 #换成匿名函数 7 calc = lambda n:n**n 8 print(calc(10)) 匿名函数主要是和其它函数搭配使用 举例: 1 ########

Java基础课程2—— I/O 的基础操作

Java基础课程2 -- I/O 的基础操作 今天我们将了解一些面向对象编程的基本概念,什么是类.什么是函数 以及了解组成一个程序的四大功能,负责处理数据输入.输出的IO,对计算过程进行控制的逻辑控制.负责对数据进行运算的数值计算.对运行过程中产生的临时变量进行存储的缓存,以及它们是如何互相支撑.协同工作的. 什么是软件? 首先,我们学习编程,但得先弄明白什么是软件? 软件,英文名Software首先由阿兰图灵提出,在软件工程.计算机科学领域,软件即通过计算机,自动化的处理运行指令.数据的计算过

C# 数据结构 栈 Stack

栈和队列是非常重要的两种数据结构,栈和队列也是线性结构,线性表.栈和队列这三种数据结构的数据元素和元素的逻辑关系也相同 差别在于:线性表的操作不受限制,栈和队列操作受限制(遵循一定的原则),因此栈和队列也称为受限制的线性表. 栈的定义:操作在表的尾端进行的线性表,栈顶:TOP,栈底:Bottom.栈中没有数据:空栈Empty Stack 表示方法:S=(a1,a2,a3,a4……..an)a1为栈底的元素,an为栈顶的元素.这N个数据按照先后顺序插入到栈内,找出栈内数据则相反 遵循的原则(Las