手搓系列-实现数组栈
废话不说,先上代码
#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
类的类图如下,包含其成员属性和成员函数。
此表格是对以上↑类图的详细说明(现场把markdown复习了一遍,呜呜呜)
ArrayStack类 | ||
Data Member:private | int mystack[MAX_SiZE] | 栈用来存储元素的数组 |
int TOP | 栈顶指针,初始时置为-1 | |
Function Membe:public | DIY_arrStack() | 数组栈类的构造函数,用于初始化将数组栈对象的栈内元素全部初始化为0 |
bool empty() | 判断数组栈是否为空,防止出栈和取栈顶元素时发生错误 | |
bool full() | 判断数组栈是否已满,防止入栈时没有空闲位置而栈溢出错误 | |
void clear() | 清空栈内所有元素,实质上元素的值本身并没有被清空释放,只是由于是私有属性无法访问,所以等同于已经被清空,等待下次入栈时新元素将其覆盖 | |
int size() | 返回数组栈当前元素的个数 | |
void push(int n) | 压栈,将新元素入栈。配合full()函数使用 | |
void pop() | 出栈,将栈顶元素出栈。配合empty()函数实用 | |
int top() | 返回栈顶元素。配合empty()函数使用 | |
int remain() | 返回当前数组栈的剩余空闲位置个数,方便在数组栈中已有元素的情况下进行压栈,让合适个数的元素入栈,防止栈溢出 |
总结
掌握原理
掌握栈的属性即可,对于栈有数组和链表两种实现方式,此文为数组实现方式,下次将实现链表实现的栈。