完成程序,该程序实现栈的顺序存储结构,构建顺序栈(栈中的元素依次为r,s,y,f,c,t),依次进行进栈和出栈操作,判断栈空和栈满操作,返回栈顶元素操作。要求生成顺序栈时,从键盘上读取数据元素。
时间: 2023-06-05 14:48:12 浏览: 245
好的,下面是程序的完整代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 6 // 定义栈的最大容量
typedef struct {
char data[MAXSIZE]; // 存储栈中的元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1; // 栈顶指针初始化为-1
}
// 判断栈是否为空
int StackEmpty(SqStack S) {
if (S.top == -1) {
return 1; // 栈为空
} else {
return 0; // 栈不为空
}
}
// 判断栈是否已满
int StackFull(SqStack S) {
if (S.top == MAXSIZE - 1) {
return 1; // 栈已满
} else {
return 0; // 栈未满
}
}
// 进栈操作
int Push(SqStack *S, char x) {
if (StackFull(*S)) {
return 0; // 栈已满,无法进栈
} else {
S->top++; // 栈顶指针加1
S->data[S->top] = x; // 将元素x存入栈顶位置
return 1; // 进栈成功
}
}
// 出栈操作
int Pop(SqStack *S, char *x) {
if (StackEmpty(*S)) {
return 0; // 栈为空,无法出栈
} else {
*x = S->data[S->top]; // 将栈顶元素赋值给x
S->top--; // 栈顶指针减1
return 1; // 出栈成功
}
}
// 返回栈顶元素
int GetTop(SqStack S, char *x) {
if (StackEmpty(S)) {
return 0; // 栈为空,无法返回栈顶元素
} else {
*x = S.data[S.top]; // 将栈顶元素赋值给x
return 1; // 返回栈顶元素成功
}
}
int main() {
SqStack S;
char x;
int i;
InitStack(&S); // 初始化栈
// 从键盘上读取数据元素,依次进栈
printf("请输入栈中的元素:\n");
for (i = 0; i < MAXSIZE; i++) {
scanf("%c", &x);
while (getchar() != '\n'); // 清空缓冲区
Push(&S, x);
}
// 依次出栈并输出出栈元素
printf("依次出栈的元素为:\n");
for (i = 0; i < MAXSIZE; i++) {
Pop(&S, &x);
printf("%c ", x);
}
printf("\n");
// 判断栈空和栈满操作
if (StackEmpty(S)) {
printf("栈为空!\n");
} else {
printf("栈不为空!\n");
}
if (StackFull(S)) {
printf("栈已满!\n");
} else {
printf("栈未满!\n");
}
// 返回栈顶元素操作
if (GetTop(S, &x)) {
printf("栈顶元素为:%c\n", x);
} else {
printf("栈为空,无法返回栈顶元素!\n");
}
return 0;
}
阅读全文