借助一个空栈tmp,将一个非空栈S中值为value的元素全部删去,最后打印出栈S中的数据。 #include <stdio.h> #include <math.h> #include <stdlib.h> typedef int DataType; /栈中允许存储的元素的最大个数/ #define STACKSIZE 100 /* 顺序栈的定义 */ typedef struct { DataType items[STACKSIZE]; /存放栈中元素的一维数组/ int top; /用来存放栈顶元素的下标/ }SqStack; int InitSqStack(SqStack S) { S->top = -1; return 1; } int SqStackEmpty(SqStack S) {/ S为顺序栈 */ if( S.top == -1 ) return 1; else return 0; } int SqStackPush( SqStack *S, DataType e ) { if ( S->top == STACKSIZE-1) return 0; /栈已满/ S->top++; S->items[S->top]=e; return 1; } int SqStackPop(SqStack *S, DataType e) { / 将栈S的栈顶元素弹出,放到e所指的存储空间中 / if ( S->top == -1 ) / 栈为空 */ return 0; e = S->items[S->top]; / 将栈顶元素带回来 / S->top--; / 修改栈顶指针 */ return 1; } int main() { SqStack S,tmp; DataType x,value; char ch; int i; InitSqStack(&S); ; do { scanf("%d",&x); // 某些编译器要求此处改为scanf_s SqStackPush(&S,x); }while ((ch=getchar())!='\n'); scanf("%d",&value); // 某些编译器要求此处改为scanf_s while (!SqStackEmpty(S)) { ; if ( ) { SqStackPush(&tmp,x); } } while (!SqStackEmpty(tmp)) { ; SqStackPush(&S,x); } for (i = 0; i <= S.top ; i++ ) { printf("%d ", ); } return 0; } ###输入数据举例 12 32 54 65 48 79 89 74 59 48 96 48 37 48 ###输出数据举例 12 32 54 65 79 89 74 59 96 37;补充完整
时间: 2024-03-05 20:54:59 浏览: 373
好的,我可以帮你补充完整这段代码。
首先,需要在程序开头加上头文件的声明和一些函数的实现。同时,需要修改一些函数的参数类型和返回值类型,让它们能够正确地实现栈的基本操作。
以下是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
#define STACKSIZE 100
typedef struct {
DataType items[STACKSIZE];
int top;
} SqStack;
int InitSqStack(SqStack *S) {
S->top = -1;
return 1;
}
int SqStackEmpty(SqStack S) {
if (S.top == -1)
return 1;
else
return 0;
}
int SqStackPush(SqStack *S, DataType e) {
if (S->top == STACKSIZE - 1)
return 0;
S->top++;
S->items[S->top] = e;
return 1;
}
int SqStackPop(SqStack *S, DataType *e) {
if (S->top == -1)
return 0;
*e = S->items[S->top];
S->top--;
return 1;
}
int main() {
SqStack S, tmp;
DataType x, value;
char ch;
int i;
InitSqStack(&S);
InitSqStack(&tmp);
do {
scanf("%d", &x);
SqStackPush(&S, x);
} while ((ch = getchar()) != '\n');
scanf("%d", &value);
while (!SqStackEmpty(S)) {
SqStackPop(&S, &x);
if (x != value) {
SqStackPush(&tmp, x);
}
}
while (!SqStackEmpty(tmp)) {
SqStackPop(&tmp, &x);
SqStackPush(&S, x);
}
for (i = 0; i <= S.top; i++) {
printf("%d ", S.items[i]);
}
return 0;
}
```
在主函数中,我们首先定义了两个栈S和tmp,并分别进行了初始化。然后,通过循环读入用户输入的数据,并将其压入栈S中。
接下来,我们读入用户想要删除的值value,并开始遍历栈S中的元素。如果元素的值不等于value,则将其弹出并压入tmp中。遍历完成后,我们再将tmp中的元素依次弹出并压回S中。
最后,我们通过循环遍历栈S中的元素,并打印出每个元素的值。
注意,在函数实现中,我们修改了SqStackPop函数的参数类型和返回值类型,使得它能够正确地将弹出的元素值保存在指针变量e中,并返回操作是否成功的标志。
阅读全文