栈 ~ 程序实现二
本篇博客基于 温故而知新 -> 数据结构 -> 线性表 -> 栈 中的理论知识,利用 C++
中的 类 对数据结构中的 栈 进行代码实现!
其中涉及了栈的 增(入栈)删(出栈)查(栈顶元素)改(没写(~ ̄▽ ̄)~),判空,打印等操作!并附带了实例以及对应的运行结果!
注意:本篇博客中 栈 的程序实现借鉴了 利用类实现顺序表 的程序!
具体内容如下
(1)Stack.h
#pragma once
#include<iostream>
using namespace std;
#include<assert.h>
typedef int STDataType;
class stack
{
public:
stack() :_val(nullptr)
, _size(0)
, _capa(0)
{}
~stack()
{
if (_val != nullptr)
{
free(_val);
_val = NULL;
_size = _capa = 0;
}
}
// 检查栈容量
void checkCapacity();
// 插入 - 入栈 (相当于是尾插)
void stackPush(STDataType val);
// 删除 - 出栈 (相当于是尾删)
void stackPop();
// 元素个数
int stackSize();
// 判空
bool stackEmpty();
// 获取栈顶元素 -- 直接返回数据即可
STDataType stackTop();
// 栈内元素打印
void stackPrint();
private:
STDataType *_val;
int _size;
int _capa;
};
(2)main.cpp
#include"Stack.h"
// 检查栈容量
void stack::checkCapacity()
{
if (_size == _capa)
{
int newCapa = _capa == 0 ? 1 : 2 * _capa;
_val = (STDataType*)realloc(_val, newCapa*sizeof(STDataType));
_capa = newCapa;
}
}
// 插入 - 入栈 (相当于是尾插)
void stack::stackPush(STDataType val)
{
assert(_val != NULL);
stack::checkCapacity();
_val[_size] = val;
_size++;
}
// 删除 - 出栈 (相当于是尾删)
void stack::stackPop()
{
assert(_val != NULL || _size == 0);
_size--;
}
// 元素个数
int stack::stackSize()
{
return _size;
}
// 判空
bool stack::stackEmpty()
{
if (_val == NULL || _size == 0)
{
cout << "空栈" << endl;
return true;
}
else
{
cout << "非空栈" << endl;
return false;
}
}
// 获取栈顶元素 -- 直接返回数据即可
STDataType stack::stackTop()
{
return _val[_size - 1];
}
// 栈内元素打印,遵循先进后出原则
void stack::stackPrint()
{
assert(_val != NULL);
int i = _size - 1;
cout << "栈内元素:";
while (i >= 0)
{
cout << _val[i--] << " ";
}cout << endl;
}
void test()
{
stack s1;
s1.checkCapacity();
s1.stackEmpty();
/* 实验入栈 */
s1.stackPush(1);
s1.stackPush(2);
s1.stackPush(3);
s1.stackPush(4);
s1.stackPrint();// 4 3 2 1
/* 实验出栈 */
s1.stackPop();
s1.stackPrint();// 3 2 1
s1.stackPop();
s1.stackPrint();// 2 1
/* 实验判空 */
s1.stackEmpty();
/* 实验元素个数 */
cout << "此时栈的元素个数为:" << s1.stackSize() << endl;
/* 实验获取栈顶元素 */
cout << "此时栈顶元素为:" << s1.stackTop() << endl;
}
int main()
{
test();
system("pause");
return 0;
}
(3)运行结果