上次上机课的成果
#include <iostream>
#include <cstdio>
#include <stack>
#include <queue>
#define maxsize 100
using namespace std;
typedef struct
{
int *base;
int *top;
int stacksize;
} sqstack;
//栈的初始化
bool initstack(sqstack &s)
{
//构造一个空栈s
s.base = new int[maxsize]; //为顺序栈分配一个最大容量为maxsize的数组空间
if (!s.base) return false; //分配失败
s.top = s.base;
s.stacksize = maxsize;
return true;
}
//入栈
bool push(sqstack &s, int e)
{
//插入元素e为新的栈顶元素
if (s.top - s.base == s.stacksize) return false; //栈满
*s.top++ = e; //元素e压入栈顶,指针加一
return true;
}
//出栈
int pop(sqstack &s)
{
//若栈不空,删除栈顶元素,否则退出
int e;
if (s.top == s.base) return false;
e = *--s.top; //栈顶指针减一,将栈顶元素赋给e
return e;
}
//取栈顶元素
int gettop(sqstack s)
{
//若站不空,返回栈顶元素
if (s.top == s.base) return 0;
return*(s.top - 1); //栈顶指针减一,返回栈顶元素
}
void menue()
{
printf("***顺序栈测试***\n");
printf("1、入栈\n");
printf("2、出栈\n");
printf("3、取栈顶元素\n");
printf("***************\n");
}
int main()
{
int n, e, j;
sqstack s;
menue();
initstack(s);
while (1)
{
printf("请输入要操作的内容:");
scanf("%d", &n);
if (n == 1)
{
printf("请输入要入栈的元素:");
scanf("%d", &e);
if (push(s, e))
printf("***successful***\n");
}
if (n == 2){
j = pop(s);
if (j == 0)
printf("***no element***\n");
else
printf("出栈元素为:%d\n", j);
}
if (n == 3)
printf("栈顶元素为:%d\n", gettop(s));
}
return 0;
}