题解 | #【模板】栈#
【模板】栈
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);
}
}
}


查看7道真题和解析