首页 > 数据结构 > 阅读:57,774

基于数组的栈

< 上一页 基于链表的栈 树的定义 下一页 >

下面来实现基于数组的栈的常规操作。(注意,在多线程环境下,下面的代码没有提供加锁机制,需要另外处理)。如下图所示,栈顶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;

}

< 上一页 基于链表的栈 树的定义 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注