链式栈的操作及实现(C语言)

链式栈的操作及实现

该代码包含链式栈的建立,出栈,入栈,返回top指针,判空,删除栈,返回栈顶元素(不删除).

注意:
该链式栈为带头节点的链式栈,基节点的数据域为-1.

代码如下.

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;               //数据域
    struct node* next;      //指针域
}node;


//创建节点
node* create_node()
{
    node* p = (node*)malloc(sizeof(node));
    p->data = -1;
    p->next = NULL;
    return p;
}

//创建栈
node* link_stack(int d[],int size)
{
    node* base = create_node();
    node* top = base;
    int i;
    for(i = 0;i < size;i++)
    {
        node* p = (node*)malloc(sizeof(node));
        p->data = d[i];
        p->next = NULL;
        top->next = p;
        top = p;
    }
    return base;
}

//获取top指针
node* get_top(node* base)
{
    node* p = base;
    for(;p->next != NULL;)
    {
        p = p->next;
    }
    return p;
}

//入栈
void push_stack(node* base,int element)
{
    node* top = get_top(base);
    node* p = create_node();
    top->next = p;
    p->data = element;
}

//出栈
int pop_stack(node* base)
{
    node* top = get_top(base);
    node* p = base;
    for(;p->next->next != NULL;)
    {
        p = p->next;
    }
    p->next = NULL;
    int data = top->data;
    free(top);
    return data;
}

//判断栈是否为空
int isempty(node* base)
{
    if(base->next == NULL)
        return 0;
    return 1;
}

//删除栈
void delete_stack(node* base)
{
    for(;isempty(base);)
        pop_stack(base);
    free(base);
    printf("栈已删除!");
}

//返回栈顶元素(不出栈)
int get_top_element(node* base)
{
    node* top = get_top(base);
    return top->data;
}


int main()
{
    int a[5] = {1,2,3,4,5};
    int size_ = sizeof(a)/sizeof(int);
    printf("创建链式栈\n");
    node *p = link_stack(a,size_);         //创建链式栈1

    printf("%d\n",pop_stack(p));           //出栈
    push_stack(p,999);                     //入栈
    printf("%d\n",get_top_element(p));     //返回栈顶元素
    delete_stack(p);                       //删除栈
    return 0;
}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

欧小鸭

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值