栈的顺序存储C++实现
栈的顺序存储类似于数组,栈是一种先进后出的数据结构,只允许对栈顶元素进行操作,不允许有遍历的行为,常见操作有入栈、出栈、获取栈顶元素、获取栈的大小等
头文件如下:
#pragma once
#include<iostream>
using namespace std;
class Stack
{
public:
Stack(int size);
~Stack();
int Push(int data);//入栈
int Pop(int* x);//出栈
int Isempty();
int Isfull();
int Gettop();//获取栈顶元素
int Getsize();//获取栈的大小
private:
int* ptr;
int top;//栈顶元素的位置(所在下标)
int MAX;
};
具体实现如下:
#include<iostream>
#include"测试栈.h"
using namespace std;
Stack::Stack(int size)//构造函数:负责初始化一个栈
{
MAX = size;
ptr = new int[MAX];//在堆区创建一个容量为MAX的空栈
top = -1;//空栈栈顶元素下标为-1
}
Stack::~Stack()
{
delete ptr;
ptr = NULL;
}
int Stack::Push(int data)
{
if (this->top > MAX - 1)
return -1;
else
{
top++;
ptr[top] = data;
return 0;
}
}
int Stack::Pop(int* x)
{
if (this->top == -1)
return -1;
else {
*x = ptr[top];
top--;
return *x;
}
}
int Stack::Isempty()
{
if (top==-1)
return 0;
else return -1;
}
int Stack::Isfull()
{
if (this->top > MAX - 1)
return 0;
else return -1;
}
int Stack::Gettop()
{
if (top == -1)
return -1;
else
{
return ptr[top];
}
}
int Stack::Getsize()
{
return top;
}
int main()
{
Stack s(10);
int i=s.Isempty();
/*if (i < 0)
cout << "空栈" << endl;
else
cout << "非空栈" << endl;*/
s.Push(1998);
s.Push(1997);
s.Push(1996);
int topelem=s.Gettop();
cout << "栈顶元素为:" << topelem << endl;
int x = 0;
int deleteelem=s.Pop(&x);
cout << "删除的元素为:" << deleteelem << endl;
topelem=s.Gettop();
cout << "此时的栈顶元素为:" << topelem << endl;
int y=s.Isfull();
if (y < 0)
cout << "非满栈" << endl;
else
cout << "满栈" << endl;
int z = s.Isempty();
if (z < 0)
cout << "非空栈" << endl;
else
cout << "空栈" << endl;
int size=s.Getsize();
cout << "栈中元素个数为:" << size+1 << endl;
}
输出如下:
注意栈中下标从0开始,size求的是栈的大小,获取栈中元素个数要加一!!