数据结构学习——栈的链表实现(程序化)

关于栈的基本概念以及和Catalan数的关系,可以参见我的其他文章

参考资料《数据结构与算法分析——C语言描述》


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

/*栈的链表实现*/
typedef struct StackNode
{
    struct StackNode *next;
    int data;
}StackNode,*Stack;

Stack CreateStack(void);//创建一个空栈
void MakeEmpty(Stack S);//清空栈
int IsEmpty(Stack S);//测试是否是空栈
void Push(int data,Stack S);//入栈
void Pop(Stack S);//出栈
int Top(Stack S);//返回栈顶元素

int main()
{
    Stack SP=NULL;
    SP=CreateStack();
    Push(5,SP);
    Push(4,SP);
    Push(8,SP);
    printf("%d\n",Top(SP));
    Pop(SP);
    printf("%d\n",Top(SP));
    return 0;
}

Stack CreateStack(void)
{
    Stack S;
    S=malloc(sizeof(StackNode));
    if(S==NULL)
        printf("out of space!\n");
    S->next=NULL;
    MakeEmpty(S);
    return S;
}

void MakeEmpty(Stack S)
{
    if(S==NULL)
        printf("Please Create Stack First!\n");
    else
        while(!IsEmpty(S))
            Pop(S);
}

int IsEmpty(Stack S)
{
    return S->next==NULL;
}

void Push(int data,Stack S)
{
    Stack tmp;

    tmp=malloc(sizeof(StackNode));
    if(tmp==NULL)
        printf("out of space!\n");
    else
    {
        tmp->data=data;
        tmp->next=S->next;
        S->next=tmp;
    }
}

void Pop(Stack S)
{
    Stack tmp;
    if(IsEmpty(S))
        printf("empty stack!\n");
    else
    {
        tmp=S->next;
        S->next=S->next->next;
        free(tmp);
    }
}

int Top(Stack S)
{
    if(!IsEmpty(S))
        return S->next->data;
    else
        printf("empty stack!\n");
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值