#include <stdio.h>
#include <stdlib.h>
//带头结点和不带头结点的区别就是,当链表为空时,L->next 相当于NULL->next是不对的
//推荐使用不带头结点的链栈
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode,*LinkStack;
//带头结点的链栈
bool InitStack(LinkStack &L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));
return false;
L->next=NULL;
return true;
}
//不带头结点的链栈
bool InitStack1(LinkStack &L)
{
L->next=NULL;
return true;
}
//带头结点的入栈
bool Push(LinkStack &L, int x){
LinkNode* S = (LinkNode*)malloc(sizeof(LinkNode));
S->data = x;
S->next = L->next;
L->next = S;
return true;
}
//不带头结点的入栈
bool Push1(LinkStack &L, int x){
LinkNode* S = (LinkNode*)malloc(sizeof(LinkNode));
S->data = x;
S->next = L;//直接将L指向的节点放后面就可以了
L = S;
return true;
}
//不带头结点的出栈
bool Pop(LinkStack &L, int &x)
{
if(L==NULL)
return false;
LinkNode* S = L;
x=L->data;
L=L->next;
free(S);
return true;
}
04-07
4381
04-14
08-05
201
09-26