用C语言写一个程序功能如下:借助一个空栈tmp,将一个非空栈S中值为value的元素全部删去,最后打印出栈S中的数据。
时间: 2023-05-29 09:07:05 浏览: 188
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大容量
typedef struct {
int data[MAXSIZE];
int top; // 栈顶指针,指向栈顶元素的下一个位置
} Stack;
void initStack(Stack *S) {
S->top = 0;
}
int isEmpty(Stack *S) {
return S->top == 0;
}
int isFull(Stack *S) {
return S->top == MAXSIZE;
}
int push(Stack *S, int x) {
if (isFull(S)) {
return 0; // 栈满,入栈失败
}
S->data[S->top++] = x;
return 1; // 入栈成功
}
int pop(Stack *S) {
if (isEmpty(S)) {
return 0; // 栈空,出栈失败
}
S->top--;
return S->data[S->top];
}
int getTop(Stack *S) {
if (isEmpty(S)) {
return 0; // 栈空,获取栈顶元素失败
}
return S->data[S->top - 1];
}
void deleteValue(Stack *S, int value) {
Stack tmp; // 借助一个空栈tmp
initStack(&tmp);
while (!isEmpty(S)) {
int x = pop(S);
if (x != value) {
push(&tmp, x);
}
}
while (!isEmpty(&tmp)) {
int x = pop(&tmp);
push(S, x);
}
}
void printStack(Stack *S) {
printf("Stack: ");
for (int i = S->top - 1; i >= 0; i--) {
printf("%d ", S->data[i]);
}
printf("\n");
}
int main() {
Stack S;
initStack(&S);
push(&S, 1);
push(&S, 2);
push(&S, 3);
push(&S, 2);
push(&S, 4);
printStack(&S); // Stack: 4 2 3 2 1
deleteValue(&S, 2);
printStack(&S); // Stack: 4 3 1
return 0;
}
```