C语言:数据结构-栈(链栈)

目录

一、结构体

1.栈顶指针节点

2.栈中节点

二、判空

三、创建

1.栈顶指针节点

2.创建栈中节点

四、入栈(头插)

五、出栈(头删)

六、打印

七、清空

八、销毁

一、结构体

1.栈顶指针节点

typedef struct
{
    int count;
    node top;

}TOP,*top;

2.栈中节点

typedef struct node_stack
{
    int data;
    struct node_stack *next;

} Node_stack, *node;

二、判空

int empty_linkstack(top P)
{
    if (P == NULL)
    {
        printf("入参为空\n");
        return -1;
    }
    return P->top == NULL ? 1 : 0;
}

三、创建

1.栈顶指针节点

top create_linkstack()
{
    top P = (top)malloc(sizeof(TOP));
    if (P == NULL)
    {
        printf("栈顶节点失败\n");
        return NULL;
    }
    printf("栈顶节点成功\n");
    P->count = 0;
    P->top = NULL;
    return P;
}

2.创建栈中节点

node create_node(int data)
{
    node P = (node)malloc(sizeof(Node_stack));
    if (P == NULL)
    {
        printf("子节点失败\n");
        return NULL;
    }
    P->data = data;
    return P;
}

四、入栈(头插)

void push_linkstack(top P, int data)
{
    if (P == NULL)
    {
        printf("入参为空\n");
        return;
    }
    node newnode = create_node(data);
    newnode->next = P->top;
    P->top = newnode;
    P->count++;
}

五、出栈(头删)

int pop_linkstack(top P)
{
    if (P == NULL)
    {
        printf("入参为空\n");
        return -1;
    }
    if (!empty_linkstack(P))
    {
        int data = P->top->data;
        node delenode = P->top;
        P->top = delenode->next;
        free(delenode);
        P->count--;
        return data;
    }
    printf("栈为空,无法出栈\n");
    return -1;
}

六、打印

void print_linkstack(top P)
{
    if (P == NULL)
    {
        printf("入参为空\n");
        return;
    }
    if (empty_linkstack(P))
    {
        printf("栈为空\n");
        return;
    }
    node q = P->top;
    while (q != NULL)
    {
        printf("P->data=%d\n", q->data);
        q = q->next;
    }
}

七、清空

void clean_linkstack(top P)
{
    if (P == NULL)
    {
        printf("入参为空\n");
        return;
    }
    if (empty_linkstack(P))
    {
        printf("栈为空\n");
        return;
    }
    node dele = P->top;
    while (dele != NULL)
    {
        P->top = dele->next;
        dele = dele->next;
        free(dele);
        P->count--;
    }
    dele = NULL;
    if (P->top == NULL)
    {
        printf("链栈已清空\n");
    }
}

八、销毁

void destory_linkstack(top *P)
{
    if (P == NULL ||*P == NULL)
    {
        printf("入参为空\n");
        return;
    }
    if (empty_linkstack(*P))
    {
        free(*P);
        *P =NULL;
        printf("链栈已销毁\n");
        return;
    }
    clean_linkstack(*P);
    free(*P);
    *P =NULL;
    printf("链栈已销毁\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值