存在以下问题:
在main函数中,您声明了一个指向SEQSTACK结构体的指针s,但没有为其分配内存空间。在使用指针之前,需要分配内存,可以使用malloc函数进行动态内存分配。另外,由于s是指针类型,调用函数时应该传递指针的地址而不是指针本身。
在push函数中,每次调用push函数时,都将s->top设置为0,这会导致之前入栈的元素被覆盖。应该将s->top的初始化放在main函数中,在第一次调用push函数之前进行初始化。
在print_stack函数中,打印栈的循环条件应该是i < s->top,而不是i <= s->top。由于栈的初始状态是空的,s->top的初始值为-1,因此应该使用<进行判断。
参考代码:
- #include <stdio.h>
- #include <stdlib.h>
- #define DATA1 int
- #define MAXSIZE 100
- typedef struct
- {
- DATA1 data[MAXSIZE];
- int top;
- } SEQSTACK;
- void push(SEQSTACK *s, DATA1 x)
- {
- s->top++;
- (s->data)[s->top] = x;
- }
- void print_stack(SEQSTACK *s)
- {
- int i;
- for (i = 0; i < s->top; i++)
- {
- printf("%d ", s->data[i]);
- }
- printf("\n");
- }
- int main()
- {
- SEQSTACK *s = (SEQSTACK *)malloc(sizeof(SEQSTACK)); // 分配内存空间
- s->top = -1; // 初始化栈顶指针
- push(s, 2);
- print_stack(s);
- free(s); // 释放内存空间
- return 0;
- }
复制代码