链栈的初始化,入栈,出栈。(带头结点)
#include <iostream>
using namespace std;
struct LiStack{
int data;
LiStack *next;
};
void InitStack(LiStack *&L){
int x;
cin>>x;
L->next=NULL;
while(x!=9999){
LiStack *p;
p=new LiStack;
p->data=x;
p->next=L->next;
L->next=p;
cin>>x;
}
}//初始化栈
bool Push(LiStack *&L,int x){
LiStack *p;
p=new LiStack;
p->data=x;
p->next=L->next;
L->next=p;
}//入栈
bool Pop(LiStack *&L,int &x){
if(L->next==NULL)
return false;
LiStack *p;
p=L->next;
x=p->data;
L->next=p->next;
delete p;
return true;
}//出栈
int main(void){
LiStack *L;
L=new LiStack;
InitStack(L);
int x;
cout<<"请输入入栈元素:"<<endl;
cin>>x;
if(Push(L,x))
cout<<x<<"已入栈"<<endl;
if(Pop(L,x)){
cout<<x<<"已出栈"<<endl;
}
if(Pop(L,x)){
cout<<x<<"已出栈"<<endl;
}
}
不带头结点(推荐)
#include <iostream>
using namespace std;
struct LiStack{
int data;
LiStack *next;
};
void InitStack(LiStack *&top){
int x;
cin>>x;
top->data=x;
top->next=NULL;
while(x!=9999){
LiStack *p;
p=new LiStack;
p->data=x;
p->next=top;
top=p;
cin>>x;
}
}//初始化栈(不带头结点)
bool Push(LiStack *&top,int x){
LiStack *p;
p=new LiStack;
p->data=x;
p->next=top;
top=p;
}//入栈(不带头结点)
bool Pop(LiStack *&top,int &x){
if(top==NULL)
return false;
LiStack *p;
p=top;
x=p->data;
top=top->next;
delete p;
return true;
}//出栈
int main(void){
LiStack *top;
top=new LiStack;
InitStack(top);
int x=10;
cout<<"请输入入栈元素:"<<endl;
cin>>x;
if(Push(top,x))
cout<<x<<"已入栈"<<endl;
if(Pop(top,x)){
cout<<x<<"已出栈"<<endl;
}
if(Pop(top,x)){
cout<<x<<"已出栈"<<endl;
}
}