栈的原理:后进先出
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#define MAX_STACK 100 //最大入栈的数量
//顺序栈的定义
typedef int ELEM;
typedef struct _Stack{
ELEM* base; //栈底
ELEM* top; //栈顶
}Stack;
// 初始化栈
bool initStack(Stack& s) {
s.base = new ELEM[MAX_STACK];
if(!s.base) return false;
s.top = s.base;
return true;
}
//判断空栈
bool isEmpty(Stack& s) {
if(s.base == s.top) return true;
return false;
}
//判断满栈
bool isFull(Stack& s) {
if(s.top - s.base == MAX_STACK) return true;
return false;
}
// 入栈,压栈
bool pushStack(Stack& s, ELEM& e) {
if(isFull(s)) return false;
*s.top = e;
s.top++;
return true;
}
//出栈,弹栈
bool popStack(Stack& s, ELEM& e) {
if(isEmpty(s)) return false;
e = *(--s.top);
return true;
}
// 获取栈顶元素
bool getStack(Stack& s, ELEM& e) {
if(isEmpty(s)) return false;
e = *(s.top-1);
return true;
}
//获取长度
int length(Stack& s) {
return (s.top - s.base);
}
// 栈的销毁
void destroy(Stack& s) {
if(s.base) delete[] s.base;
s.base = s.top = NULL;
}
int main(void) {
Stack s;
ELEM e;
// 初始化栈
initStack(s);
//入栈10哥元素
for(int i=0; i<10; i++) {
e = i+1;
if(pushStack(s, e)) {
printf("入栈成功, 入栈元素为%d\n", e);
} else {
printf("入栈失败\n");
}
}
//获取长度
printf("长度为:%d\n", length(s));
//获取栈顶元素
if(getStack(s, e)) {
printf("栈顶元素为:%d\n", e);
}
//栈的销毁
// destroy(s);
// 出栈4个元素
for(int i=0; i<4; i++) {
if(popStack(s, e)) {
printf("出栈成功,出栈元素为:%d", e);
} else {
printf("出栈失败\n");
}
}
system("pause");
return 0;
}
测试图如下: