基于数组的栈
下面来实现基于数组的栈的常规操作。(注意,在多线程环境下,下面的代码没有提供加锁机制,需要另外处理)。如下图所示,栈顶top指向数组中下一个空位:
#define MAXSIZE 1000//栈中数组容纳的元素个数
int Stack[MAXSIZE]={0};//栈的底层数据结构:数组stack
int top=0;//栈顶
创建栈
int CreateStack()
{
top=0;//将top置零
return 1;
}
判断栈是否满
int IsStackFull()
{
return top==MAXSIZE?1:0;
}
判断栈是否空
int IsStackEmpty()
{
return top==0?1:0;
}
入栈:
int push(int val)
{
if(IsStackFull())
{
return -1;
}
Stack[top]=val;
top++;
return 1;
}
出栈:
int pop(int *e)
{
if(IsStackEmpty())
{
return -1;
}
if(e==NULL)
{
return -1;
}
top--;
*e = Stack[top];
return 1;
}
栈的遍历:
void TraverseStack()
{
while(!IsStackEmpty())
{
int val;
pop(&val);
printf("%d ",val);
}
printf("\n");
}
接口测试:
int _tmain(int argc, _TCHAR* argv[])
{
CreateStack();
for(int i=0;i<500;i++)
{
push(i+1);
}
int val;
pop(&val);
printf("val:%d\n", val);
TraverseStack();
return 0;
}