数据结构————链栈学习

本文介绍了链栈的基本结构和操作,包括如何初始化一个空栈,判断栈是否为空,以及进行进栈(Push)、出栈(Pop)、获取栈顶元素(GetTop)和打印栈中所有元素(PrintStack)的操作。这些操作是链式存储结构在数据处理中的常见应用。
摘要由CSDN通过智能技术生成

链栈

1.链栈结构定义

typedef int LSTDataType;

typedef struct StackNode {
    LSTDataType data;               // 数据域
    struct StackNode *next;         // 指针域
} StackNode, *LinkStackPtr;

2.链栈初始化(即创建一个空栈)

void InitStack(LinkStackPtr *top) {
    *top = NULL;
}

3.判断栈是否为空(若为空则返回 1,否则返回 0)

int IsEmpty(LinkStackPtr top) {
    return top == NULL;
}

4.进栈(将元素 x 压入栈顶)

void Push(LinkStackPtr *top, int x) {
    LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));    // 为新元素分配内存空间
    p->data = x;        // 将元素 x 压入栈顶
    p->next = *top;     // 将新元素插入链表的头部
    *top = p;
}

5.出栈(删除栈顶元素并返回其值)

int Pop(LinkStackPtr *top) {
    if (IsEmpty(*top)) {    // 栈空,返回空值
        printf("Stack is empty!\n");
        return -1;
    } else {
        LinkStackPtr p = *top;      // 备份栈顶指针
        int x = p->data;            // 取出栈顶元素
        *top = p->next;             // 删除栈顶结点
        free(p);                    // 释放栈顶结点的存储空间
        return x;                   // 返回栈顶元素的值
    }
}

6.获取栈顶元素

int GetTop(LinkStackPtr top) {
    if (IsEmpty(top)) {             // 栈空,返回空值
        printf("Stack is empty!\n");
        return -1;
    } else {
        return top->data;           // 返回栈顶元素的值
    }
}

7.输出链栈中的元素

void PrintStack(LinkStackPtr top) {
    if (IsEmpty(top)) {             // 栈空,返回空值
        printf("Stack is empty!\n");
    } else {
        printf("Stack elements: ");
        while (top != NULL) {
            printf("%d ", top->data);
            top = top->next;
        }
        printf("\n");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值