链式堆栈

来源:互联网 发布:国家网络安全法文件 编辑:程序博客网 时间:2024/06/08 03:55

#include <stdio.h>
#include <stdlib.h>


typedef char data_type; //数据类型
typedef struct filo
{


    data_type data;
    struct filo *former;    //指向前一个单元


}Stack_type,*Stack_pointer;


void StackInit(Stack_pointer &top);
void push(Stack_pointer &,data_type );
data_type pop(Stack_pointer &);


int main()
{
    data_type ch;
    Stack_pointer filo;
    StackInit(filo);
    while((ch=getchar())!=0x0a) //以回车结束输入
        push(filo,ch);
    printf("\n");
    while((ch=pop(filo))!=-1)
        putchar(ch);
    return 0;
}


void StackInit(Stack_pointer &top)
{
    top=NULL;
}


void push(Stack_pointer &top,data_type e)
{
    Stack_type * temp;
    if((temp=(Stack_pointer)malloc(sizeof(Stack_type)))!=NULL)
    {
        temp->data=e;
        temp->former=top;
        top=temp;   //top始终指向栈顶
    }
}


data_type pop(Stack_pointer &top)
{
    Stack_type *temp;
    data_type top_element;
    if(top==NULL    //到达栈底
    {
        printf("\ngot to buttom!\n");
        return -1;
    }
    else
    {   /*取值并改变top指针的指向*/
        top_element=top->data;
        temp=top->former;
        free(top);
        top=temp;
    }
    return top_element;
}

运行结果:

0 0
原创粉丝点击