#include<iostream>
const static int g_iStackSize = 100; //定义栈长度,为100
static int g_iStackPoint = -1; //初始化栈指针为-1,也就是栈里一个元素都没有
//定义栈元素数据结构,可以扩展为任意类型数据
typedef struct tagStackData
{
int iData; //栈元素的数据,整型
}stStackData,* pstStackData;
//栈只保存栈元素指针
pstStackData g_arrStack[g_iStackSize];//这个就是栈体了,一个长度为stacksize的数组
//压元素入栈,可以返回栈指针当前位置
//@param data 压入栈的元素
//@return int 为100时就是满了
int push(const pstStackData data)
{
if(g_iStackPoint >= g_iStackSize)//也就是栈满了
{
//提示栈满
printf("stack is full.\n");
//返回栈指针位置
return g_iStackPoint;
}
else//栈还没满
{
//压元素入栈
g_arrStack[g_iStackPoint+1] = data;
//移动栈指针
++g_iStackPoint;
//返回栈指针位置
return g_iStackPoint;
}
}
//弹出元素
//@param outStackPoint输入型参数,输出栈指针位置,为-1时说明为空
//@return pstStackData 弹出的栈数据
pstStackData pop(int& outStackPoint)
{
if(g_iStackPoint <= -1)//栈都空了,还弹
{
outStackPoint = -1;//栈指针位置为-1
return NULL;
}
else
{
--g_iStackPoint;//栈指针位置向前移动
outStackPoint = g_iStackPoint;//返回栈指针位置
return g_arrStack[g_iStackPoint+1];//返回栈里的元素
}
}
int main()
{
int iInput = 0;//输入的值,当输入-1里,停止读取数据
int iStackPoint = g_iStackPoint;//用来保存栈的指针位置
while(-1 != iInput && 100 != iStackPoint)//当输入-1,或者栈满了的时候,就停止
{
scanf("%d", &iInput);//读取数据
//创建栈元素
pstStackData pData = new stStackData;
pData->iData = iInput;
//压栈
iStackPoint = push(pData);
}
while(-1 != iStackPoint)//当栈指针位置不在栈尾
{
//依次弹出栈里的元素
pstStackData pData = pop(iStackPoint);
printf("pop value:%d;\n", pData->iData);
delete pData;
}
system("pause");//让命令窗口暂停,观察输出3
return 0;
}
const static int g_iStackSize = 100; //定义栈长度,为100
static int g_iStackPoint = -1; //初始化栈指针为-1,也就是栈里一个元素都没有
//定义栈元素数据结构,可以扩展为任意类型数据
typedef struct tagStackData
{
int iData; //栈元素的数据,整型
}stStackData,* pstStackData;
//栈只保存栈元素指针
pstStackData g_arrStack[g_iStackSize];//这个就是栈体了,一个长度为stacksize的数组
//压元素入栈,可以返回栈指针当前位置
//@param data 压入栈的元素
//@return int 为100时就是满了
int push(const pstStackData data)
{
if(g_iStackPoint >= g_iStackSize)//也就是栈满了
{
//提示栈满
printf("stack is full.\n");
//返回栈指针位置
return g_iStackPoint;
}
else//栈还没满
{
//压元素入栈
g_arrStack[g_iStackPoint+1] = data;
//移动栈指针
++g_iStackPoint;
//返回栈指针位置
return g_iStackPoint;
}
}
//弹出元素
//@param outStackPoint输入型参数,输出栈指针位置,为-1时说明为空
//@return pstStackData 弹出的栈数据
pstStackData pop(int& outStackPoint)
{
if(g_iStackPoint <= -1)//栈都空了,还弹
{
outStackPoint = -1;//栈指针位置为-1
return NULL;
}
else
{
--g_iStackPoint;//栈指针位置向前移动
outStackPoint = g_iStackPoint;//返回栈指针位置
return g_arrStack[g_iStackPoint+1];//返回栈里的元素
}
}
int main()
{
int iInput = 0;//输入的值,当输入-1里,停止读取数据
int iStackPoint = g_iStackPoint;//用来保存栈的指针位置
while(-1 != iInput && 100 != iStackPoint)//当输入-1,或者栈满了的时候,就停止
{
scanf("%d", &iInput);//读取数据
//创建栈元素
pstStackData pData = new stStackData;
pData->iData = iInput;
//压栈
iStackPoint = push(pData);
}
while(-1 != iStackPoint)//当栈指针位置不在栈尾
{
//依次弹出栈里的元素
pstStackData pData = pop(iStackPoint);
printf("pop value:%d;\n", pData->iData);
delete pData;
}
system("pause");//让命令窗口暂停,观察输出3
return 0;
}