1. 使用C语言中的链表来实现栈
2. 我们知道栈的特点是先进后出,而链表中的头插法正好满足我们的需求,因为头插法后面插入的节点位于链表的开头,所以我们可以使用头插法来插入节点,在弹出节点的时候弹出链表的第一个节点即可,而第一个节点是很容易找出来的,所以可以很轻松地实现栈的压入和弹出操作
3. 下面是具体的代码:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
node *next;
}LNode;
LNode *L;
void push(LNode *&L, int x){
LNode *p = (LNode*)malloc(sizeof(LNode));
p->next = NULL;
p->data = x;
p->next = L->next;
L->next = p;
}
//因为在主程序中需要输出x的值所以这里需要传入的是x的引用这样在函数中变化的时候主函数也是跟着一起变化的
int pop(LNode *&L, int &x){
LNode *p;
if(L->next == NULL) return 0;
p = L->next;
x = p->data;
L->next = p->next;
free(p);
return 1;
}
int main(void){
int n;
L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
for(int i = 0; i < 5; ++i){
scanf("%d", &n);
push(L, n);
}
int x;
pop(L, x);
printf("%d\n", x);
pop(L, x);
printf("%d\n", x);
return 0;
}