用C语言创建一个栈创建顺序栈的结构、出栈、入栈、判栈空、栈满并实现加、减、乘、除功能。
时间: 2023-06-12 16:07:47 浏览: 112
好的,下面是基于C语言的顺序栈实现及加、减、乘、除功能的代码:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 假设栈的最大长度为100
typedef struct {
int data[MAX_SIZE]; // 存储栈中的元素
int top; // 栈顶指针,指向栈顶元素
} SeqStack;
// 初始化栈
void InitStack(SeqStack *s) {
s->top = -1; // 初始时,栈顶指针指向-1,表示栈为空
}
// 判断栈是否为空
int StackIsEmpty(SeqStack *s) {
return s->top == -1;
}
// 判断栈是否已满
int StackIsFull(SeqStack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
int Push(SeqStack *s, int value) {
if (StackIsFull(s)) {
return 0; // 栈已满,入栈失败
}
s->data[++s->top] = value; // 栈顶指针先加1,再将元素压入栈中
return 1; // 入栈成功
}
// 出栈操作
int Pop(SeqStack *s, int *value) {
if (StackIsEmpty(s)) {
return 0; // 栈已空,出栈失败
}
*value = s->data[s->top--]; // 将栈顶元素弹出,栈顶指针减1
return 1; // 出栈成功
}
// 加法
int Add(SeqStack *s) {
int a, b;
if (Pop(s, &a) && Pop(s, &b)) { // 如果可以出栈两个元素
Push(s, a + b); // 将结果入栈
return 1; // 加法成功
} else {
return 0; // 加法失败
}
}
// 减法
int Sub(SeqStack *s) {
int a, b;
if (Pop(s, &a) && Pop(s, &b)) {
Push(s, b - a);
return 1; // 减法成功
} else {
return 0; // 减法失败
}
}
// 乘法
int Mul(SeqStack *s) {
int a, b;
if (Pop(s, &a) && Pop(s, &b)) {
Push(s, a * b);
return 1; // 乘法成功
} else {
return 0; // 乘法失败
}
}
// 除法
int Div(SeqStack *s) {
int a, b;
if (Pop(s, &a) && Pop(s, &b)) {
if (a == 0) {
printf("Error: divide by zero\n");
Push(s, b); // 如果除数为0,则将被除数入栈,保持栈不变
} else {
Push(s, b / a);
}
return 1; // 除法成功
} else {
return 0; // 除法失败
}
}
int main() {
SeqStack s;
InitStack(&s);
int value;
char c;
while ((c = getchar()) != '\n') { // 读入表达式
if (c >= '0' && c <= '9') { // 如果是数字字符
value = value * 10 + c - '0'; // 将字符转为数字,累加到value中
} else {
// 如果是运算符,则进行相应的操作
switch (c) {
case '+':
Add(&s);
break;
case '-':
Sub(&s);
break;
case '*':
Mul(&s);
break;
case '/':
Div(&s);
break;
default: // 如果是其他字符,则忽略
break;
}
value = 0; // 将value清零
}
if (value > 0) { // 如果value非零,则将其入栈
Push(&s, value);
}
}
// 最后,栈中只剩下一个元素,即表达式的值
if (!StackIsEmpty(&s)) {
Pop(&s, &value);
printf("The result is %d\n", value);
} else {
printf("Error: empty stack\n");
}
return 0;
}
```
以上代码实现了一个基于顺序栈的加、减、乘、除功能。你可以输入一个表达式,程序会自动计算并输出结果。
阅读全文