#include <stdio.h> #include <stdlib.h> #include<string.h> // 链式栈节点结构体 typedef struct Node { int data; // 数据域 struct Node* next; // 指针域,指向下一个节点 } Node; // 链式栈结构体 typedef struct Stack { Node* top; // 栈顶指针 } Stack; // 初始化链式栈 Stack* init() { Stack* stack = (Stack*)malloc(sizeof(Stack)); // 分配内存空间 stack->top = NULL; // 栈顶指针初始化为NULL return stack; } // 判断链式栈是否为空 int isEmpty(Stack* stack) { return stack->top == NULL ? 1 : 0; } // 入栈操作 void push(Stack* stack, int data) { Node* node = (Node*)malloc(sizeof(Node)); // 创建新节点 node->data = data; // 赋值 node->next = stack->top; // 新节点的next指针指向原栈顶节点 stack->top = node; // 更新栈顶指针 } // 出栈操作 void pop(Stack* stack) { if (isEmpty(stack)) { // 如果栈为空则返回-1 printf("error\n"); //这段代码是可以优化的 return; } int data = stack->top->data; // 获取栈顶元素的值 Node* tmp = stack->top; // 保存栈顶节点指针 stack->top = stack->top->next;// 更新栈顶指针 free(tmp); // 释放节点空间 printf("%d\n", data); // 返回栈顶元素的值 } // 获取栈顶元素 void peek(Stack* stack) { if (isEmpty(stack)) { // 如果栈为空则返回-1 printf("error\n"); return; } printf("%d\n", stack->top->data); // 返回栈顶元素的值 } // 测试代码 int main() { Stack* stack = init(); // 初始化栈 int i, input, n = 0; char s[10]; scanf("%d", &n); while (n) { scanf("%s", s); if (strcmp(s, "push") == 0) { scanf("%d", &input); push(stack, input); } else if (strcmp(s, "pop") == 0) { pop(stack); } else if (strcmp(s, "top") == 0) { peek(stack); } n--; } return 0; }