链栈的定义
typedef struct Linknode{
ElemType data; //数据域
struct Linknode *next; //指针域
}*LiStack; //栈类型的定义
带头结点的链栈基本操作:
初始化
struct Linknode{
int data; //数据域
Linknode *next; //指针域
}Linknode,*LiStack;
void InitStack(LiStack &L){ //L为头指针
L = (Linknode *)malloc(sizeof(Linknode));
L->next = NULL;
}
判栈空
bool isEmpty(LiStack &L){
if(L->next == NULL){
return true;
}
else
return false;
}
进栈
void pushStack(LiStack &L, int x){
Linknode s; //创建存储新元素的结点
s = (Linknode *)malloc(sizeof(Linknode));
if(s == NULL){
return false;
}
else{
s->data = x;
s->next = L->next;
L->next = s;
return true;
}
}
出栈
bool popStack(LiStack &L, int &x){
Linknode s;
if(L->next == NULL) //栈空不能出栈
return false;
s = L->next;
x = s->data;
L->next = L->next->next;
free(s)
return true;
}
获取栈顶元素
int getStack(LiStack L,int &x){
if(L->next == NULL){
return false;
}
else{
x = L->next->data;
return true;
}
}
不带头结点的链栈基本操作:
初始化
struct Linknode{
int data; //数据域
Linknode *next; //指针域
}Linknode,*LiStack;
bool InitStack(LiStack &L){ //L为头指针
L = NULL;
return true
}
判栈空
bool isEmpty(LiStack &L){
if(L == NULL){
return true;
}
else
return false;
}
进栈
void pushStack(LiStack &L, int x){
Linknode s; //创建存储新元素的结点
s = (Linknode *)malloc(sizeof(Linknode));
if(s == NULL){
return false;
}
else{
s->data = x;
s->next = L;
L = s;
return true;
}
}
出栈
bool popStack(LiStack &L, int &x){
Linknode *s;
if(L == NULL) //栈空不能出栈
return false;
s = L;
x = s->data;
L = L->next;
free(s)
return true;
}
获取栈顶元素
int getStack(LinkedStack L,int &x){
if(L == NULL){
return false;
}
else{
x = L->data;
return true;
}
}