数据结构——栈(用链表实现栈)(C语言)

本文详细介绍了使用顺序表和链表实现栈的数据结构,包括栈的初始化、销毁、入栈和出栈操作。讨论了两种方法的优劣,指出它们在实际应用中的相辅相成关系。
摘要由CSDN通过智能技术生成

顺序表和链表实现栈,二者相辅相成,很难说那个更好。

1.栈结构体的声明

先定义链表结构体,在定义栈结构体

typedef struct LTNode{
    DataType data;
    LTNode* next;
}LTNode;

typedef strcut Stack{
    LTNode* head;//指向栈顶
    size_t size;//栈内元素的个数
}Stack;

2.栈的初始化

void StackInit(Stack* ps)
{
    ps->head = NULL;
    ps->size = 0;
}

3.栈的销毁

void StackDestory(Stack* ps)
{
    while(ps->head)
    {        
        LTNode* next = ps->head->next;//定义一个链表指针,指向要释放的下一个节点
        free(ps->head);
        ps->head = next;
     }
    ps->size = 0;
}

4.入栈

void StackPush(Stack* ps, DataType x)
{
    LTNode* new_node = (LTNode*)malloc(sizeof(LTNode));//创建一个新的链表节点
    new_node->data = x;
    new_node->next = ps->head;//新节点的下一个指向栈顶节点
    ps->head = new_node;//更新栈顶
    ps->size++;
}

5.出栈

DataType StackPop(Stack* ps)
{
    assert(ps->head);
    LTNode* stack_head = ps->head;
    LTNode* next = ps->head->next;
    free(ps->head);
    ps->head = next;
    ps->size--;
    return stack_head->data;
}

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值