哈哈哈第一次用C++把基础功能实现了
创建栈初始化入栈出栈
#include<cstdio>
#include<cstdlib>//bool类型实现的头文件
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
#define Status int
#define SElemType int
#define MaxSize 100
//栈的定义数据结构
typedef struct Stack {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//基本操作*****************************************************************************
//顺序栈的初始化
Status InitStack(SqStack &s) {//构造一个空栈
s.base = new SElemType[MaxSize];
if (!s.base){
printf("分配失败\n");
return 0;
}
s.top = s.base;
s.stacksize = MaxSize;
}
//顺序栈的入栈
Status Push(SqStack &s, SElemType e) {
if (s.top - s.base == s.stacksize) return 0;//栈满
*(s.top++) = e;//先用再加,先入栈再指针上移
return 1;
}
//顺序栈的出栈
Status Pop(SqStack &s, SElemType &e){
if (s.top == s.base) return 0;
else e = *--s.top;//先减再用,先指针下移再出栈
return 1;
}
//得到栈顶元素而不修改指针
bool GetTop(SqStack &s, SElemType &e) {
if (s.top == s.base) return false;
else e = *--s.top;//先减再用,先指针下移再出栈
return true;
}
//功能实现函数***************************************************************************
//菜单与显示
void menu() {
printf("1.入栈 2.出栈\n");
printf("3.取栈顶 4.退出\n");
}
//入栈功能实现
void PushToSTack(SqStack &s) {
int n; SElemType e; int flag;
printf("请输入入栈元素个数(>=1): \n");
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
printf("请输入第%d个元素的值:", i + 1);
scanf_s("%d", &e);
flag = Push(s, e);
if (flag) printf("%d已入栈\n", e);
else { printf("栈已满!\n"); break;
}
}
}
//出栈功能实现
void PopFromStack(SqStack &s) {
int n; SElemType e; int flag;
printf("请输入出栈元素个数(>=1): \n");
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
printf("请输入第%d个元素的值:", i + 1);
scanf_s("%d", &e);
flag = Push(s, e);
if (flag) printf("%d已出栈\n", e);
else {
printf("栈已空!\n"); break;
}
}
}
//取栈顶功能实现
void GetTopOfStack(SqStack &s) {
SElemType e; bool flag;
flag = GetTop(s, e);
if (flag) printf("栈顶元素为:%d\n", e);
else printf("栈已空!\n");
}
//主函数
int main() {
SqStack s; int choice;
InitStack(s);
while (1)
{
menu();
printf("请输入菜单单号: \n");
scanf_s("%d", &choice);
if (choice == 4)break;
switch (choice)
{
case 1:PushToSTack(s); break;
case 2:PopFromStack(s); break;
case 3:GetTopOfStack(s); break;
default:printf("输入错误!\n");
}
}
return 0;
}
实现功能效果: