//初始化,入栈,出栈,读栈顶,判栈空
#include <stdio.h>
#define MaxSize 20
typedef struct {
int data[MaxSize];
int top;
}SqStack;//顺序栈
bool InitStack(SqStack &s) {
s.top = -1;//一个数组s,栈顶初始为-1
return true;
}
bool StackFull(SqStack s) { // 判断栈是否满
if (s.top == MaxSize - 1) {
return true;
}
else {
return false;
}
}
bool StackEmpty(SqStack s) { // 判断栈是否空
if (s.top == -1) {
return true;
}
else {
return false;
}
}
bool Push(SqStack& s, int x) { // 入栈
if (StackFull(s)) {
printf("栈满");
return false;
}
else {
s.top++;
s.data[s.top] = x;
return true;
}
}
bool Pop(SqStack& s,int &x ) {//出栈
if (StackEmpty(s)) {
printf("栈空");
return false;
}
else
{
x = s.data[s.top];
s.top--;
return true;
}
}
bool GetStack(SqStack s, int& x) {//读栈
if (StackEmpty(s)) {
printf("栈空");
return false;
}
else
{
x = s.data[s.top];
printf("x=", x);
return true;
}
}
bool AllGet(SqStack s,int& x) {
if (StackEmpty(s)) {
printf("栈空");
return false;
}
else
{
while (s.top != -1) {
x = s.data[s.top];
printf("x=%d\n", x);
s.top--;
}
return true;
}
}
int main() {
SqStack s;
int choice, x;
InitStack(s); // 初始化栈
printf("请选择操作:\n");
printf("1. 入栈\n");
printf("2. 出栈\n");
printf("3. 遍历栈\n");
printf("4. 判空\n");
printf("5. 判满\n");
printf("0. 退出\n");
scanf_s("%d", &choice);
while (choice != 0) {
switch (choice) {
case 1:
printf("请输入要入栈的元素值: ");
scanf_s("%d", &x);
if (Push(s, x)) {
printf("入栈成功! 栈顶元素为: %d\n", s.data[s.top]);
}
else {
printf("入栈失败!\n");
}
break;
case 2:
if (Pop(s, x)) {
printf("出栈元素为: %d\n", x);
}
else {
printf("出栈失败,栈为空!\n");
}
break;
case 6:
if (GetStack(s, x)) {
printf("栈顶元素为: %d\n", x);
}
else {
printf("栈为空!\n");
}
break;
case 3:
AllGet(s, x);
break;
case 4:
if (StackEmpty(s)) {
printf("栈为空!\n");
}
else {
printf("栈不为空!\n");
}
break;
case 5:
if (StackFull(s)) {
printf("栈为满!\n");
}
else {
printf("栈不为空!\n");
}
break;
default:
printf("无效的选择,请重新输入!\n");
}
printf("\n请选择操作:\n");
scanf_s("%d", &choice);
}
return 0;
}
顺序栈基础操作
于 2024-08-16 09:17:25 首次发布