#include
#include
// 定义栈结构体
typedef struct {
int *data; // 栈中数据的指针
int top; // 栈顶指针
int size; // 栈的大小
} SeqStack;
// a. 对栈动态分配内存
void initStack(SeqStack *S, int size) {
S->data = (int *)malloc(sizeof(int) * size);
S->top = -1;
S->size = size;
}
// b. 初始化栈
void createStack(SeqStack *S) {
int data;
printf("请输入栈的元素数量:");
int n;
scanf("%d", &n);
printf("请依次输入栈的元素:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &data);
S->data[++S->top] = data;
}
}
// c. 取栈顶元素的值
int top(SeqStack *S) {
if (S->top == -1) {
printf("栈为空,无法取栈顶元素。\n");
return -1;
}
return S->data[S->top];
}
// d. 在栈顶插入元素
void push(SeqStack *S, int data) {
if (S->top == S->size - 1) {
printf("栈已满,无法插入元素。\n");
return;
}
S->data[++S->top] = data;
}
// e. 出栈操作
int pop(SeqStack *S) {
if (S->top == -1) {
printf("栈为空,无法出栈。\n");
return -1;
}
int data = S->data[S->top--];
return data;
}
// f. 遍历栈中元素
void traverse(SeqStack *S) {
if (S->top == -1) {
printf("栈为空。\n");
return;
}
printf("栈中元素为:\n");
for (int i = S->top; i >= 0; i--) {
printf("%d ", S->data[i]);
}
printf("\n");
}
int main() {
SeqStack S;
initStack(&S, 10);
createStack(&S);
printf("栈顶元素为:%d\n", top(&S));
push(&S, 10);
printf("插入后栈顶元素为:%d\n", top(&S));
printf("出栈的元素为:%d\n", pop(&S));
traverse(&S);
return 0;
}
标签: