用结构实现栈,函数压栈,弹栈,初始化,释放
#include <iostream>
using namespace std;
struct stack
{
int *data; //栈数据存储,后面 把一维数组的地址给了data
int memnum; //栈元素个数
int size; //栈大小
};
//其实不用声明的,我按书上傻X的抄下来的
int initstack(stack &s,int size);
void delstack(stack &s);
int popstack(stack &s,int &num);
int pushstack(stack &s,int mem);
//初始化栈
int initstack(stack &s,int size)
{
s.data=new int [size]; //将一维数组的地址给了data
if(s.data==NULL)
return 0;
s.memnum=0;
s.size=size;
return 1;
}
//释放栈
void delstack(stack &s)
{
delete[]s.data; //就是释放指针
}
//弹栈,无数据时返回0,否则返回1
int popstack(stack &s,int &num)
{
if(s.memnum==0)
return 0;
num=s.data[--s.memnum];
return 1;
}
//压栈,成功返1,否则返0
int pushstack(stack &s,int mem)
{
if(s.memnum==s.size)
return 0;
s.data[s.memnum++]=mem;
return 1;
}
int main()
{
int i,num;
stack newstack;
initstack(newstack,10);
//压栈
cout<<"通过压栈函数将整数压入栈中"<<endl;
for(i=0;i<10;i++)
{
cout<<i<<" ";
pushstack(newstack,i);
}
cout<<endl;
//弹栈
for(i=0;i<10;i++)
{
if(popstack(newstack,num))
cout<<num<<" ";
}
cout<<endl<<endl;
//直接操作栈的内部数据,破坏性地使用栈
//直接将数据存入data
for(i=10;i<20;i++)
{
cout<<i<<" ";
newstack.data[newstack.memnum++]=i;
}
cout<<endl;
//直接从data中读取数据
cout<<"直接从data中读取数据:"<<endl;
for(i=0;i<10;i++)
{
cout<<newstack.data[i]<<" ";
}
cout<<endl;
//非法读取data ,造成越界
for(i=10;i<20;i++)
cout<<newstack.data[i]<<" ";
cout<<endl;
//释放栈
delstack(newstack);
return 0;
}