栈的实现-链表

声明:

#include "stdio.h"
#include "stdlib.h"

//单链表结点
struct Node;
//指向结点的指针类型
typedef struct Node *PNode;

typedef int DataType;

struct Node {
    DataType info;
    PNode link;
};

//链接栈类型定义
struct LinkStack {
    //指向栈顶结点
    PNode top;
};
//链接栈类型的指针类型
typedef struct LinkStack * PLinkStack;

 

//创建一个空链栈
PLinkStack createEmptyStack_link(void)
{
    PLinkStack plstack;
    plstack=(PLinkStack)malloc(sizeof(struct LinkStack));
    if(plstack!=NULL)
    {
        plstack->top=NULL;
    }
    else
    {
        printf("out of space! \n");
    }
    return plstack;
}

 

//判断所指栈是否为空,如果是,则返回1,否则返回0;
int isEmptyStack_link(PLinkStack plstack)
{
    return (plstack->top==NULL);
}

 

//进栈运算
void push_link(PLinkStack plstack,DataType x)
{
    PNode p;
    p=(PNode)malloc(sizeof(struct Node));
    if (p==NULL) 
    {
        printf("out of space! \n");
    }
    else
    {
        p->info=x;
        p->link=plstack->top;
        plstack->top=p;
    }
}

 

//出栈运算
void pop_link(PLinkStack plstack)
{
    PNode p;
    if (isEmptyStack_link(plstack)) 
    {
        printf("empty stack top! \n");
    }
    else
    {
        p=plstack->top;
        plstack->top=plstack->top->link;
        free(p);
    }
}

 

//取栈顶元素
DataType top_link(PLinkStack plstack)
{
    if (plstack->top==NULL) 
    {
        printf("stack is empty ! \n");
    }
    else
    {
        return (plstack->top->info);
    }
}

测试:

 

int main(int argc,char* argv[])
{
    PLinkStack plstack;
    plstack=createEmptyStack_link();

    push_link(plstack,5);
    push_link(plstack,3);
    push_link(plstack,7);
    push_link(plstack,59);
    push_link(plstack,12);

    printf("%d ",plstack->top->info);
    pop_link(plstack);
    printf("%d ",plstack->top->info);
}

posted on 2012-05-11 11:13  yucong  阅读(188)  评论(0)    收藏  举报

导航