C++实现栈结构

栈是一种动态集合,是比较常用的一种数据结构,它的特点就是:后进先出。

栈就好像一个只有一个门的房子,先进去的人在里面,后进去的人在外面,里面的人想出来,必须得让外面的人先出来才行。如图所示,我们可以用一个数组S[1...n]来实现一个最多可容纳n个元素的栈。这个数组有两个属性,一个是maxSize,表示最大容纳量,一个是top,表示最外面的元素的位置,也是最先出来的元素,叫栈顶元素。

       

    我们往栈中加入4个元素,分别是 15 、6 、2 、9,因为数组是从0开始的,因此栈顶元素是S[3],top=3,这个过程叫入栈。

                                    假如我们再往栈中加入两个元素,那么top就变成了5。

 那么按照后进先出的原则,我们获取栈的第一个元素就是5,此时5已经出栈,top变成了4,但是5还留在S[5]中,等到下一个元素填充到S[5]时才会被抹去。

这就是栈的基本操作,需要注意的是maxSize是一开始就固定的,不会因为入栈和出栈受到影响。下面我们用C++的类封装一个栈。

#pragma once
#include <iostream>
using namespace std;

class stack {

public:
	stack(int maxSize) :maxSize(maxSize)  //初始化参数
	{
		top = -1;
		dataMemory = new int[maxSize];
	}
	void push(int data) //入栈
	{

		if (top + 1 == maxSize)
		{
			printf("栈满,无法入栈!\n");
			return;
		}
		dataMemory[++top] = data;
	}
	int pop()//出栈
	{
		if (top == -1)
		{
			printf("栈空,无法出栈!\n");
			return -99999;
		}
	
		return dataMemory[top--];
	}
	int getTop()  //获取栈顶标记位置
	{
		return top;
	}
	void print()  //打印栈中元素,方便测试
	{
		for (int i = 0; i <= top; i++)
		{
			cout << dataMemory[i] << '\t';
		}
		cout << endl;
	}
protected:

	int maxSize;
	int top;
	int* dataMemory;
};

测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值