题解 | #【模板】栈#
【模板】栈
https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> #include<stdlib.h> typedef struct NODE { int data; struct NODE* next; }NODE; typedef struct STACK { NODE* top; size_t cnt; }STACK; NODE* create_node(int data) { NODE* node = malloc(sizeof(NODE)); node->data = data; node->next = NULL; return node; } STACK* create_stack(void) { STACK* stack = malloc(sizeof(STACK)); // NODE* node = create_node(0); stack->top = NULL; stack->cnt = 0; return stack; } void push(STACK* stack, int data) { NODE* node = create_node(data); if (stack->cnt == 0) { stack->top = node; stack->cnt++; } else { node->next = stack->top; stack->top = node; stack->cnt++; } } int pop(STACK* stack) { if (stack->cnt <= 0) { printf("error\n"); return -1; } int data=stack->top->data; NODE* temp = stack->top; stack->top = stack->top->next; stack->cnt--; free(temp); return data; } int top(STACK* stack) { if (stack->cnt <= 0) { printf("error\n"); return -1; } return stack->top->data; } int main() { STACK* stack = create_stack(); int n = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { char arr[10]; scanf("%s", arr); if (strcmp("push", arr) == 0) { int data = 0; scanf("%d\n", &data); push(stack, data); } else if (strcmp("pop", arr) == 0) { int num = pop(stack); if (num != -1) printf("%d\n", num); } else if (strcmp("top", arr) == 0) { int num = top(stack); if (num != -1) printf("%d\n", num); } else { break; } } return 0; }