线性堆栈

来源:互联网 发布:淘宝卖家中心手机版下载 编辑:程序博客网 时间:2024/06/05 00:07
#include <stdio.h>
#include <stdlib.h>

#define MAXSZ 100 //最大容量
#define NO_SENSE_DATA ' ' //没有意义的数据,用于初始化
typedef char data_type; /定义数据类型


typedef struct
{
    data_type space[MAXSZ];
    int top;
}STACK;

/*****************************************************************************************

*

* 堆栈初始化

* 给每个存储单元赋一个没有意义的数据

*

*****************************************************************************************/

void StackInit(STACK* stack_var)
{
    if(stack_var!=NULL)
    {
        for(stack_var->top=MAXSZ-1;(stack_var->top)>=0;(stack_var->top)--)
        {
            stack_var->space[stack_var->top]=NO_SENSE_DATA;
        }
    }
    else
    {
        printf("Error---- from StackInit\n");
    }
}



/**********************************************************************

*

* 压栈

*

**********************************************************************/

void push(STACK* stack_var,data_type menber)
{
    if(stack_var->top<MAXSZ-1)
        stack_var->space[++(stack_var->top)]=menber;
}


/**********************************************************************

*

* 弹栈

*

**********************************************************************/

data_type pop(STACK* stack_var)
{
    if(stack_var->top>=0)
        return stack_var->space[(stack_var->top)--];
    return NO_SENSE_DATA;
}


int main()
{
    data_type mes;
    STACK stack;
    StackInit(&stack);
    while((mes=getchar())!=0x0a) //以回车结束输入
        push(&stack,mes);
    while((mes=pop(&stack))!=NO_SENSE_DATA)
        printf("%c\n",mes);
    return 0;

}


运行结果:


0 0