该问题描述了一个算法,使用顺序栈的基本运算删除栈中所有值为e的元素。使用C语言
时间: 2024-05-09 15:17:11 浏览: 11
实现该算法的代码如下:
```
#include <stdio.h>
#define MAXSIZE 100 //定义栈的最大长度
typedef struct {
int data[MAXSIZE]; //保存栈中元素的数组
int top; //栈顶指针
} Stack;
void initStack(Stack *s) { //初始化栈
s->top = -1;
}
int isEmpty(Stack s) { //判断栈是否为空
return s.top == -1;
}
int isFull(Stack s) { //判断栈是否已满
return s.top == MAXSIZE - 1;
}
void push(Stack *s, int e) { //将元素e入栈
if (isFull(*s)) {
printf("Error: Stack is full");
return;
}
s->top++; //栈顶指针加1
s->data[s->top] = e; //将元素e存入数组中
}
int pop(Stack *s) { //将栈顶元素出栈并返回
if (isEmpty(*s)) {
printf("Error: Stack is empty");
return -1;
}
int e = s->data[s->top]; //保存栈顶元素的值
s->top--; //栈顶指针减1
return e; //返回栈顶元素的值
}
void delElem(Stack *s, int e) { //删除栈中所有值为e的元素
int i, j;
for (i = 0, j = 0; i <= s->top; i++) { //遍历栈中所有元素
if (s->data[i] != e) { //如果当前元素不为e,则将其移动到j处
s->data[j++] = s->data[i];
}
}
s->top = j - 1; //更新栈的长度
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
push(&s, 2);
push(&s, 4);
delElem(&s, 2);
while (!isEmpty(s)) {
printf("%d ", pop(&s));
}
return 0;
}
```
该代码实现了一个基于顺序栈的算法,可以删除栈中所有值为e的元素。其中,initStack函数用于初始化栈,isEmpty和isFull函数分别用于判断栈是否为空和已满,push和pop函数分别用于将元素入栈和出栈,delElem函数用于删除栈中所有值为e的元素。在主函数中,我们先将一些元素压入栈中,然后删除所有值为2的元素,最后输出栈中剩余的元素。