C++中栈结构建立和操作(二)

2014-11-23 23:18:25 · 作者: · 浏览: 13
TA * PopST(StackType *s)
{
if(s->top==0)
{
cout<<"栈为空,不能再输出!"<
exit(0);
}
return &(s->data[s->top--]);
}
当栈中有数据时,该函数返回值是一个指向DATA类型数据的指针。
读取点结构
读取点结构也就是读取栈结构中结点的数据。由于栈结构只能在一端进行操作,因此这里的读操作其实就是读站点的数据。
需要注意的是,读节点数据的操作和出栈操作不同。读结点操作仅仅是显示栈顶结点数据的内容,而出栈操作则将栈顶数据弹出。
示例代码如下:
[cpp]
DATA *PeekST(StackType *s)
{
if(s->top==0)
{
cout<<"栈已空"<
exit(0);
}
return &(s->data[s->top]);
}
对比出栈的示例代码,不难发现读取点结构同样返回了栈顶结点的地址,但是却没有使top减1.
完整示例
下面是栈的基本操作的完整示例:
程序代码:
[cpp]
#include
#include
using namespace std;
#define MAXLEN 50
struct DATA
{
string name;
int age;
};
struct StackType
{
DATA data[MAXLEN+1];
int top;
};
/******************初始化栈结构****************/
StackType *STInit()
{
StackType *p;
if(p=new StackType) //申请栈空间
{
p->top=0; //设置栈顶为0
return p; //返回栈顶指针
}
return NULL;
}
/****************判断空栈**********************/
int STIsEmpty(StackType *s)
{
int t;
t=(s->top==0); //通过栈顶的值进行判断
return t;
}
/**********************判断满栈****************/
int STIsFull(StackType *s)
{
int t;
t=(s->top==MAXLEN);
return t;
}
/**********************清空栈**********************/
void STClear(StackType *s)
{
s->top=0;
}
/********************释放空间********************/
void STFree(StackType *s)
{
delete s;
}
/**********************入栈***********************/
int PushST(StackType *s,DATA data)
{
if((s->top+1)>MAXLEN)
{
cout<<"栈溢出"<
return 0;
}
s->data[++s->top]=data; //将元素压入栈
return 1;
}
/************************出栈***********************/
DATA * PopST(StackType *s)
{
if(s->top==0)
{
cout<<"栈为空,不能再输出!"<
exit(0);
}
return &(s->data[s->top--]);
}
/**********************读取点结构*******************/
DATA *PeekST(StackType *s)
{
if(s->top==0)
{
cout<<"栈已空"<
exit(0);
}
return &(s->data[s->top]);
}
/*****************进入主函数**********************/
int main()
{
StackType *stack;
DATA data,*p_data;
stack=STInit();
cout<<"===============入栈操作:============="<
cout<<"输入姓名 ,年龄进行入栈操作:"<
//执行入栈操作
while(1)
{
cin>>data.name>>data.age;
if(data.name=="0")
{
break; //当姓名和年龄都是0的时候退出输入
}else
{
PushST(stack,data);
}
}
p_data=PopST(stack);
cout<<"弹出栈顶元素"<
cout<<"name:"<name<<",age:"<age<
p_data=PeekST(stack);
cout<<"输出栈顶元素"<
cout<<"name:"<name<<",age:"<age<
cout<<"================将所有的的数据出栈:============="<
while(1)
{
p_data=PopST(stack);
cout<<"name:"<name<<",age:"<age<
}
STFree(stack);
return 0;
}
程序运行界面: