题解 | #【模板】栈#
【模板】栈
https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf
#include <stdio.h> #include <stdlib.h> #include <string.h> //链表头插法模拟栈,头结点为空 typedef struct stack{ int data; struct stack *next; } stack; void n_push(stack* tmp,int data){ stack* nxt=malloc(sizeof(stack)); nxt->data=data; nxt->next=tmp->next; tmp->next=nxt; } int n_pop(stack* tmp){ if (tmp->next==NULL) { printf("error\n"); return -1; }else { printf("%d\n",tmp->next->data); stack* nxt=tmp->next; tmp->next=nxt->next; free(nxt); nxt=NULL;//free后置空,否则非法访问有概率读到旧数据。 return 0; } } int n_top(stack* tmp){ if (tmp->next==NULL){ printf("error\n"); return -1; }else { printf("%d\n",tmp->next->data); return 0; } } int main(void){ int num=0; stack * head=NULL;//千万记得初始化 head=malloc(sizeof(stack)); head->next=NULL; scanf("%d",&num); while(num--){ char str[8]; scanf("%s ",str); if (str[1]=='u'){ int data=0; scanf("%d",&data); n_push(head, data); }else if (str[0]=='p') { n_pop(head); }else if (str[0]=='t') { n_top(head); } } }