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

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

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;
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值