原理
栈是一种先进后出的线性结构,存储方式大概是这样
结构体定义
top是栈顶位置
typedef struct _Stack
{
int* base;
int top;
}Stack;
代码实现
初始化
base分配一个数组,top设为0
bool initStack(Stack& s)
{
s.base = new int[MAX];
if (!s.base) return false;
s.top = 0;
return true;
}
遍历
因为是数组,用个循环就好
void printStack(Stack& s)
{
if (s.top == 0)`在这里插入代码片`
{
cout << "栈空" << endl;
return;
}
for (int i = 0; i < s.top; i++)
{
cout << s.base[i] << " ";
}
cout << endl;
}
销毁
释放base的空间,将top设为0
void destroyStack(Stack& s)
{
if (s.base)
{
delete[] s.base;
}
s.top = 0;
}
入栈
bool pushStack(Stack& s, int val)
{
if (s.top == MAX)
{
cout << "栈满" << endl;
return false;
}
s.base[s.top++] = val;
return true;
}
出栈
bool popStack(Stack& s, int* node)
{
if (s.top == 0)
{
cout << "栈空" << endl;
return false;
}
*node = s.base[--s.top ];
return true;
}
取栈顶元素
int topStack(Stack& s)
{
if (s.top == 0)
{
cout << "栈空" << endl;
return -1;
}
return s.base[s.top - 1];
}
完整代码
#include <iostream>
using namespace std;
#define MAX 5
typedef struct _Stack
{
int* base;
int top;
}Stack;
// 初始化
bool initStack(Stack& s)
{
s.base = new int[MAX];
if (!s.base) return false;
s.top = 0;
return true;
}
// 遍历
void printStack(Stack& s)
{
if (s.top == 0)
{
cout << "栈空" << endl;
return;
}
for (int i = 0; i < s.top; i++)
{
cout << s.base[i] << " ";
}
cout << endl;
}
// 销毁
void destroyStack(Stack& s)
{
if (s.base)
{
delete[] s.base;
}
s.top = 0;
}
// 入栈
bool pushStack(Stack& s, int val)
{
if (s.top == MAX)
{
cout << "栈满" << endl;
return false;
}
s.base[s.top++] = val;
return true;
}
// 出栈
bool popStack(Stack& s, int* node)
{
if (s.top == 0)
{
cout << "栈空" << endl;
return false;
}
*node = s.base[--s.top ];
return true;
}
// 取栈顶元素
int topStack(Stack& s)
{
if (s.top == 0)
{
cout << "栈空" << endl;
return -1;
}
return s.base[s.top - 1];
}
int main(void)
{
Stack s;
initStack(s);
for (int i = 0; i < 6; i++)
{
pushStack(s, i * 5);
}
printStack(s);
cout << "栈顶元素是:" << topStack(s) << endl;
int node;
popStack(s, &node);
cout << "出栈的是:" << node << endl;
printStack(s);
destroyStack(s);
return 0;
}