C语言实现进栈和出栈

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用C++中STL的stack,只有C++中有,C标准库没有STL。

程序:(单整数)

#include

#include

using namespace std;

stacks;

int main()

{

int a,b;

scanf("%d",&a);

s.push(a);

printf("%d\n",s.top());

s.pop();

return 0;

}

方法二:

自己写程序(整数):

#include

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;

}

调试:

相关文档
最新文档