题目:
初始化一个堆栈
测试堆栈是否已经满
进栈
测试堆栈是否为空
退栈
取当前栈顶元素
分析:
进栈
新的数据进栈前首先测试堆栈是否上溢,若溢出则插入失败;否则则将栈顶指针top向前移动一个位置,然后将新的数据元素item插入到修改以后的top指出的新的栈顶位置上
出栈
首先测试堆栈是否为空,如果为空则出栈失败;否则则将栈顶指针后退一个位置,表示出栈成功,并记录最后一个出栈的元素
源代码
#include<iostream>
#define m 10000//定义堆栈的最大容量
using namespace std;
int stack[m];
int top;//栈顶指针变量
//初始化堆栈
int init(int top)
{
top = -1;
return top;
}
//测试堆栈是否已经满
void full(int top)
{
if(top == m-1)
cout<<"堆栈已满!"<<endl;
else
cout<<"堆栈非满!"<<endl;
}
//进栈
int push(int stack[],int &top,int item)
{
if(top==m-1)
return 0;
else
{
stack[++top] = item;
return 1;
}
}
//测试堆栈是否为空
void empty(int top)
{
if(top==-1)
cout<<"堆栈为空"<<endl;
else
cout<<"堆栈非空"<<endl;
}
//出栈
int pop(int stack[],int &top,int &item)
{
if(top==-1)
return 0;
else
{
item = stack[top--];
return 1;
}
}
//取当前栈顶的元素
int gettop(int stack[],int top,int &item)
{
if(top==-1)
return 0;
else
{
item = stack[top];
return 1;
}
}
int main()
{
int item,flag;
//初始化堆栈
cout<<"初始化堆栈"<<endl;
cout<<"top="<<init(top)<<endl<<endl;
//测试堆栈是否已经满
cout<<"堆栈是否已满"<<endl;
full(top);
//进栈,以-1为进栈结束标志
cout<<endl<<"进栈,以-1为进栈结束标志"<<endl<<"输入item:";
while(cin>>item)
{
if(item==-1)
break;
else
{
flag = push(stack,top,item);
if(flag==0)
cout<<"插入失败"<<endl;
else
cout<<"插入成功"<<endl;
}
}
//取当前栈顶的元素
cout<<endl<<"取当前栈顶的元素"<<endl;
flag = gettop(stack,top,item);
if(flag==0)
cout<<"堆栈为空"<<endl;
else
cout<<"item="<<item<<endl;
//测试堆栈是否为空
cout<<endl<<"测试堆栈是否为空"<<endl;
empty(top);
//出栈
cout<<endl<<"出栈"<<endl;
flag = pop(stack,top,item);
if(flag==0)
cout<<"堆栈为空"<<endl;
else
cout<<"退栈成功"<<endl<<"最后一个出栈的元素:"<<item<<endl;
return 0;
}