栈的新手入门示例
作为代码新手可以参考的一个栈的模板示例,今天刚刚学到,作文笔记发在博客上
#include<stdio.h>
#include<stdlib.h>
// 创建盏
// 压入盏
// 取出盏
// 打印
// 清空
// 建立一个盏的类型方便区分
typedef int node;
//建立三个指针,分别为盏首,盏尾,盏记录轨迹指针
node * pStack = NULL;
node * pStackRear = NULL;
node * pStackCurrentNode = NULL;
// 建立盏空间,返回盏首指针
node * CreateStack(node pdata){
// 申请一段盏的内存,用来存储
pStack = (node *)malloc(sizeof(node)*pdata);
//将记录指针和盏尾的指针指向内存另一头,和盏首区分开来开辟出空间,
// 记录指针将在盏头盏位中间游走
pStackCurrentNode = pStackRear = pStack + (pdata - 1);
return pStack;
}
//压入数据操作
void pushStack(int pdata){
//记录指针指向空值时,表示盏已满
if(pStackCurrentNode == NULL){
printf("盏满了,不能再加了!\n");
return;
}
//如果未指向空,那么记录指针的当前空间存入当前数据
*pStackCurrentNode = pdata;
//如果记录指针和盏首相等,表示当下已经刚好存满,
//便将记录指针指向空值,下一次就不再读取
if(pStackCurrentNode == pStack)
{
pStackCurrentNode = NULL;
return;
}
else
{ //否则记录指针继续向下走,存储数据
pStackCurrentNode--;
}
}
//读盏操作
node outStack(){
//如果记录指针和盏尾指针相等,表示记录指针没有走动
//或者已经返回,数据已经读取完,盏已经空了
if(pStackCurrentNode == pStackRear)
{
printf("盏都空了,还取呢啊?\n");
return -1;
}
else
{ //如果记录指针为空,那么表示盏是满的
//将记录指针重新指向盏首,将值返回就好
if(pStackCurrentNode == NULL){
pStackCurrentNode = pStack;
return *pStackCurrentNode;
}
else
{ //记录指针向上走,返回指针值进行出盏操作
pStackCurrentNode++;
return *pStackCurrentNode;
}
}
}
//正向打印值,验证数据
void printStack(){
node * p = pStack;
while (p != pStackCurrentNode)
{
printf("%d",*p);
p--;
/* code */
}
//栈重置
void empytStack(){
pStackCurrentNode = pStackRear;
}
}
void main(){
CreateStack(10);
pushStack(10);
pushStack(8);
pushStack(3);
pushStack(3);
pushStack(3);
pushStack(3);
pushStack(3);
pushStack(3);
pushStack(3);
pushStack(3);
for (int i = 0; i < 10; i++)
{
printf("%d\n",outStack()) ; /* code */
}
}