数据结构链栈

链栈的抽象类型表示及相关运算(C语言实现)

文章目录

一.链栈抽象类型定义
二.链栈的基本运算

1.链栈的抽象类型定义

#define OK 1
#define EROOR 0
#define NULLSTACK 1
#define NULLDATA 0

#include <stdlib.h>

typedef int ElemType;
typedef struct lickStack{
    ElemType data; // 数据域
    struct lickStack *next; //指针域
}LickStack;

2.链栈的初始化

void InitStack(LickStack *L){

    L = (LickStack *)malloc(sizeof(LickStack));

    L->next = NULL;  //置空栈

}

3.链栈判空

int EmptyStack(LickStack *L){

    if(L->next == NULL)
        return NULLSTACK;
    else
        return 0;

}

4.进栈运算

int PushStack(LinkStack *L,ElemType edata){
    
    LinkStack *temp; //初始化一个工作指针
    temp = (LinkStack *)malloc(sizeof(LinkStack));
    
    if(!temp) //初始化失败
        return EROOR;
    
    temp->data = edata; //元素进栈
    temp->next = L->next; //使指针指向原来栈顶
    L->next = temp; //置换栈顶指向新栈顶
    return OK;
    
}

5.出栈运算

int PopStack(LinkStack *L) {

    LinkStack *temp;

    if (!EmptyStack(temp)) {//栈判空 非空执行以下操作

        temp = L->next; //temp指向当前栈顶
        L->next = temp->next; //使原栈顶下一个结点成为新栈顶
        free(temp); //释放原栈顶
        return OK;

    } else {
        return EROOR;
    }

}

6.取栈顶元素

ElemType GetTop(LinkStack *L){

    if(!EmptyStack(L)){ //判空
        return L->next->data;
    } else{
        return NULLDATA;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值