本帖最后由 李京 于 2021-4-8 19:43 编辑
你的函数都应该传入指针,不能直接传入,这是传值和传地址的区别
你的程序 21 和 39 if 判断的条件,调用函数没有加 ()
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10
typedef struct stack {
int top;
int data[MAX_SIZE];
}*stack, sta; // 这里的名字我随便取的 这里我修改了 stack 变成了 指针类型的了
void init_stack(stack a) { // 传入指针
a->top = -1;
a->data[0] = 0;
}
int stack_empty(stack a) {
if (a->top == -1)
{
printf("t->top == %d ", a->top);
return 1;
}
else return 0;
}
void show(stack a) {
if (stack_empty(a)) printf("An empty stack!"); // 这里我改了
int temp = a->top;
while (temp >= 0) {
printf("%d ", a->data[temp]);
temp--;
}
printf("\n");
}
void push(stack a, int new_push) {
if (MAX_SIZE - 1 == a->top) printf("Full stack!Stop insert data!");
else {
++a->top;
a->data[a->top] = new_push;
}
}
void pop(stack a) {
if (stack_empty(a)) printf("An empty stack!"); // 这里的条件我改了
else a->top--;
}
int get_top_elem(stack a) {
return a->data[a->top];
}
int main() {
int i;
sta a;
init_stack(&a); // 传入地址
//show(a);
for (i = 0; i < 10; i++) {
push(&a, i);
show(&a);
}
pop(&a);
show(&a);
return 0;
}
|