无头链式栈操作集合

#include <stdio.h>
#include <stdlib.h>
// 无头栈
typedef struct linkstack
{
    int data;
    struct linkstack* next;
}linkstack;

// 入栈
void pushStack(linkstack** top, int data)
{
    linkstack* node = (linkstack*)malloc(sizeof(linkstack));
    if (node == NULL)
    {
        perror("push malloc error\n");
        return;
    }
    
    node->data = data;//存入数据
    node->next =*top;//改变新节点指向
    *top = node;//改变栈针指向,确保永远指向栈顶
}

// 判断栈空
int isFullStack(linkstack* top)
{
    return top == NULL;
    
}

// 出栈
int popStack(linkstack** top)
{

    if (isFullStack(*top))
    {
        printf("空栈!\n");
        return -1;
    }
    // int temp;
    linkstack* p = *top;
    int temp = p->data;
    (*top) = (*top)->next;
    free(p);
    p = NULL;
    return temp;
}

// 栈数量
void stackLength(linkstack* top)
{
    int temp = 0;
    while (top)
    {
        top = top->next;
        temp++;
    }
    printf("栈数量:%d\n", temp);
}

// 获取栈顶数据
void getTopData(linkstack* top)
{
    printf("栈顶:%d\n", top->data);
}

// 清空栈
void noneStack(linkstack** top)
{
    while (!isFullStack(*top))
    {
        popStack(top);
    }
    printf("已清空!\n");
}



// 遍历
void printStack(linkstack* top)
{
    while (top)
    {
        printf("%d->", top->data);
        top = top->next;
    }
    printf("NULL\n");
}



int main(int argc, char const *argv[])
{
    linkstack* top = NULL;//创建空栈,
    pushStack(&top, 1);
    pushStack(&top, 2);
    pushStack(&top, 3);
    pushStack(&top, 4);
    pushStack(&top, 5);
    printStack(top);
    stackLength(top);

    printf("出栈:%d\n", popStack(&top));
    printStack(top);
    getTopData(top);

    printf("出栈:%d\n", popStack(&top));
    printStack(top);
    getTopData(top);

    noneStack(&top);
    stackLength(top);




    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值