#include <iostream>
using namespace std;
#define MAXSIZE 100
#define ADDSIZE 10
//顺序栈的结构
typedef struct{
int *top;
int *base;
int stacksize;
}sqstack;
class stack {
public:
//初始化
void Inite() {
head.base = new int[MAXSIZE];
head.top = head.base;
head.stacksize = MAXSIZE;
length = 0;
}
//入栈
bool Push(int value) {
//如果栈满,给栈分配更多空间
if (head.top - head.base == head.stacksize)
{
int *p = new int[head.stacksize + ADDSIZE];
int *m;
//以下代码实现使head.base和head.top指向新分配的空间的首地址,
//并使p和m指向旧的存有数据的空间的首地址;
m = p;
p = head.base;
head.base = m;
m = p;
head.top = head.base;
for (int i = 0; i < head.stacksize; i++)
{
//使用将旧空间的数据复制到新空间
*head.top = *m;
head.top++;
m++;
}
delete[] p;
head.stacksize = head.stacksize + ADDSIZE;
}
*head.top = value;
head.top++;
length++;
cout << "压入元素成功!" << endl;
return true;
}
//出栈,删除栈顶元素
bool Pop() {
if (head.base != head.top) {
head.top--;
length--;
cout << "删除栈顶元素成功!" << endl;
return true;
}
else {
cout << "栈空,没有元素可以删除!" << endl;
return false;
}
}
//取栈顶元素,并不删除栈顶元素
void Gettop(int *p) {
if (head.base != head.top) {
*p = *(head.top - 1);
cout << "取栈顶元素成功!" << endl;
}
else {
cout << "栈空,没有元素可以被取!" << endl;
}
}
//获取栈内元素数量
int Getlen() {
return length;
}
//销毁栈
void Destory() {
delete[] head.base;
}
private:
sqstack head;
int length;
};
//测试主函数
int main()
{
stack pp;
pp.Inite();
//压入两百个数
for (int j = 0; j < 101; j++)
{
pp.Push(j * 10);
}
cout << "栈内有 " << pp.Getlen() << " 个元素;" << endl;
int *p = new int;
for (int i = 0; i < 50; i++)
{
pp.Gettop(p);
cout << "栈顶元素为:" << *p << endl;
pp.Pop();
}
pp.Getlen();
cout << "一次装BBBBB结束,这是一个伟大的装B实验-------------logo------------" << endl;
pp.Destory();
}
C++实现顺序栈及其应用
最新推荐文章于 2022-05-10 17:02:55 发布