链表栈和队列的实现

链表栈和队列

#include "nodes.h"
// 链表栈
/*
带头指针,头指针的值表示栈的深度
*/
// 链表栈
/*
带头指针,头指针的值表示栈的深度
*/
SNode* createStack()
{
    return createSNode(0);
}

// 入栈
void stack_push(SNode* shead, SNode* value)
{
    addSNodeToTheNext(shead, value);
    shead->value++;
}

// 出栈
SNode* stack_pop(SNode* shead)
{
    if(shead->value == 0)
    {
        return NULL;
    }

    shead->value--;
    return deleteSNode(shead, shead->next);
}

// 获得栈的深度
int stack_getLen(SNode* shead)
{
    return shead->value;
}

队列

#include "nodes.h"
// 链式队列,f是头指针,r是尾指针
typedef struct
{
    struct SNode* f;
    struct SNode* r;
}Queue;

// 获得队列长度
int queue_getLen(Queue* q)
{
    SNode* f = q->f;
    return f->value;
}

/*
头指针的值表示队列的长度
*/
Queue* createQueue()
{
    Queue* q = (Queue* )malloc(sizeof(Queue));
    q->f = createSNode(0);
    q->r = q->f;
    return q;
}

// 入队列
void queue_push(Queue* q, SNode* newNode)
{
    SNode* f = q->f;
    f->value++; // 队列长度加1

    // 在尾指针后面添加一个结点,并让尾指针往后移
    addSNodeToTheNext(q->r, newNode);
    q->r = newNode;
}

// 出队列
SNode* queue_pop(Queue* q)
{
    if(queue_getLen(q) == 0) // 出队列前队列长度为0
    {
        return NULL;
    }

    SNode* f = q->f;
    f->value--;

    SNode* result = deleteSNode(f, f->next);

    if(queue_getLen(q)==0) // 出队列后队列长度为0
    {
        q->r = q->f;
    }

    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值