【数据结构】链栈的定义和基本操作

//链栈定义及各类操作
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>

typedef int Elemtype;

typedef struct LiStack
{
    Elemtype data; //数据域
    struct LiStack *next; //指针域
} LiStack; //栈类型定义

//初始化链栈
void InitLiStack(LiStack S){
    S.next = NULL;
    return true;
}

//链栈进栈操作(将数据元素e压入栈中)
void PushLiStack(LiStack *S, Elemtype e){
    LiStack *top = (LiStack *)malloc(sizeof(LiStack));
    if (top == NULL)
        return false; //申请内存空间失败
    top->data = e;
    top->next = S->next;
    S->next = top; //指针前移至头节点
    return true;
}

//链栈出栈操作(将栈顶元素弹出,放到e所指的存储空间中)
void PopLiStack(LiStack *S, Elemtype *e){
    if (S == NULL)
        return false; //空栈,无数据
    LiStack *temp = S->next; 
    *e = temp->data;
    S->next = temp->next;
    free(temp);
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值