您的位置:首页 > 其它

链栈基本运算的实现

2011-11-09 21:52 239 查看
//链栈基本运算的实现
#include<iostream>
using namespace std;

typedef char datatype;
typedef struct node * pointer;
struct node {
datatype data;
pointer next;
}; 			//链栈结点类型
typedef struct {
pointer top;
} lkstack;		//链栈类型

//栈的初始化
lkstack* Init_lkstack( )
{
lkstack *ls = new lkstack;
ls->top = NULL;
return ls;
}

//判栈空
int Empty_lkstack(lkstack *ls)
{
if(ls->top==NULL)
return 1;
else
return 0;
}

//入栈
void Push_lkstack(lkstack *ls,datatype x)
{
pointer p;
p=new node;		//申请新结点*p
p->data=x;;		//新结点data域装入x的值
p->next=ls->top;	//新结点next为原栈顶
ls->top=p;		//新结点为新栈顶
}

//出栈
int Pop_lkstack(lkstack *ls,datatype *x)
{
pointer p;
if(ls->top==NULL)//下溢
{
cout<<"栈空,不能出栈!\n";
return 0;
}
else
{
p=ls->top;
*x=p->data;
ls->top=p->next;
delete p;
return 1;
}
}

//取栈顶
int Gettop_lkstack(lkstack *ls,datatype *x)
{
if(ls->top==NULL)//栈空
{
cout<<"栈空,无栈顶可取!\n";
return 0;
}
else
{
*x=ls->top->data;
return 1;
}
}

void Display(lkstack *ls)
{
pointer p = ls->top;
if(Empty_lkstack(ls))
{
cout<<"此时栈为空。"<<endl;
}
else
{
cout<<"栈顶到栈底的元素依次是:";
while(p!=NULL)
{
cout<<p->data<<"  ";
p = p->next;
}
cout<<endl;
}
}

int main()
{
lkstack *S;
S=Init_lkstack();

char choice,x;
int flag = 1;
while(flag)
{
cout<<"------------链栈------------------------------"<<endl;
cout<<"        1. 入栈                                 "<<endl;
cout<<"        2. 出栈                                 "<<endl;
cout<<"        3. 取栈顶元素                           "<<endl;
cout<<"        4. 判断栈是否为空                       "<<endl;
cout<<"        5. 浏览栈底到栈顶所有元素(测试用)     "<<endl;
cout<<"        6. 退出                                 "<<endl;
cout<<"------------------------------------------------"<<endl;
cout<<"请选择:";

cin>>choice;
switch(choice)
{
case '1':
cout<<"请输入一个需要入栈的字符"<<endl;
cin>>x;
Push_lkstack(S,x);
cout<<"入栈完成"<<endl;
break;

case '2':
if(Pop_lkstack(S,&x))
cout<<"出栈成功,弹出栈的元素是:"<<x<<endl;
else
cout<<"出栈失败!"<<endl;
break;

case '3':
if(Gettop_lkstack(S,&x))
cout<<"取栈顶元素成功,弹出栈的元素是:"<<x<<endl;
else
cout<<"取栈顶元素失败!"<<endl;
break;

case '4':
if(Empty_lkstack(S))
cout<<"此时栈为空。"<<x<<endl;
else
cout<<"此时栈不为空。"<<endl;
break;

case '5':
Display(S);
break;

case '6':
flag=0;
break;
default :
cout<<"输入错误,请重新选择。"<<endl;
}

}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: