C++手搓实现数组栈

手搓系列-实现数组栈

废话不说,先上代码

#include<iostream>
using namespace std;

#define MAX_SiZE 10

class DIY_arrStack {
public:
	DIY_arrStack() {
		mystack[MAX_SiZE] = { 0 };
		TOP = -1;
	}

	bool empty(){
		if (TOP == -1)
			return true;
		else
			return false;
	}

	bool full() {
		if (TOP == MAX_SiZE)
			return true;
		else
			return false;
	}

	void clear() {
		TOP = -1;
	}

	int size() {
		return TOP + 1;
	}

	void push(int n) {
		if (TOP == MAX_SiZE - 1)
			cout << "错误!栈已满。" << endl;
		else
			mystack[++TOP] = n;
	}

	void pop() {
		if (TOP == -1) {
			cout << "错误!栈已空。" << endl;
		}
		else
			TOP--;
	}

	int top() {
		if (TOP == -1) {
			cout << "错误!栈空,无元素!" << endl;
			return -1;
		}
			
		else
			return mystack[TOP];
	}

	int remain() {
		return MAX_SiZE - TOP - 1;
	}


private:
	int mystack[MAX_SiZE];
	int TOP;
};

void ShowStackStatus(DIY_arrStack& s) {
	cout << "栈现有元素个数为:\t" << s.size() << endl;
	cout << "栈剩余空闲位置个数为:\t" << s.remain() << endl;
	cout << "栈顶元素为:\t" << s.top() << endl;
}

int main()
{
	DIY_arrStack s1;
	int number, stackelement;
	ShowStackStatus(s1);

	if (s1.full()) {
		cout << "栈已满,禁止入栈!" << endl;
	}
	else {
		cout << "剩余" << s1.remain() << "个空闲位置!请输入你想入栈的元素个数:";
		cin >> number;
		for (int i = 0; i < number && number <= s1.remain(); i++) {
			cin >> stackelement;
			s1.push(stackelement);
		}
		if (number > s1.remain()) {
			cout << "剩余" << s1.remain() << "个空闲位置,无法入栈" << number << "个元素!" << endl;
		}
		else
			cout << "入栈完毕!" << endl;
	}

	cout << "清空前:" << endl;
	ShowStackStatus(s1);
	cout << "清空后:" << endl;
	s1.clear();
	ShowStackStatus(s1);
	return 0;
}

此程序的ArrayStack类的类图如下,包含其成员属性和成员函数。

ArrayStack
int mystack[MAX_SiZE];
int TOP;
DIY_arrStack()
bool empty()
bool full()
void clear()
int size()
void push(int n)
void pop()
int top()
int remain()

此表格是对以上↑类图的详细说明(现场把markdown复习了一遍,呜呜呜)

ArrayStack类
Data Member:privateint mystack[MAX_SiZE]栈用来存储元素的数组
int TOP栈顶指针,初始时置为-1
Function Membe:publicDIY_arrStack()数组栈类的构造函数,用于初始化将数组栈对象的栈内元素全部初始化为0
bool empty()判断数组栈是否为空,防止出栈和取栈顶元素时发生错误
bool full()判断数组栈是否已满,防止入栈时没有空闲位置而栈溢出错误
void clear()清空栈内所有元素,实质上元素的值本身并没有被清空释放,只是由于是私有属性无法访问,所以等同于已经被清空,等待下次入栈时新元素将其覆盖
int size()返回数组栈当前元素的个数
void push(int n)压栈,将新元素入栈。配合full()函数使用
void pop()出栈,将栈顶元素出栈。配合empty()函数实用
int top()返回栈顶元素。配合empty()函数使用
int remain()返回当前数组栈的剩余空闲位置个数,方便在数组栈中已有元素的情况下进行压栈,让合适个数的元素入栈,防止栈溢出

总结

掌握原理

掌握栈的属性即可,对于栈有数组和链表两种实现方式,此文为数组实现方式,下次将实现链表实现的栈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

味堡o_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值