【力扣】[剑指 Offer 09.] 用两个栈实现队列

一.题目

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead
,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/

二.代码展示

typedef struct {
    // 两个栈,长度,top,
    int len;
    int top1;
    int top2;
    int *s1;
    int *s2;
} CQueue;


CQueue* cQueueCreate() {
    // 队列开辟,初始化,两个栈开辟空间
    CQueue* q = malloc(sizeof(CQueue));
    q->len =10000;
    q->top1 = -1;
    q->top2 = -1;
    q->s1 = malloc(sizeof(int)*q->len);
    q->s2 = malloc(sizeof(int)*q->len);

    // 返回
    return q;
}

void cQueueAppendTail(CQueue* obj, int value) {
    // 如果top1的栈为-1,那就直接将s2所有的元素倾倒s1中,在给++top1的位置赋值value
    if(obj->top1 == -1)
    {
        while(obj->top2 != -1)
            obj->s1[++(obj->top1)] = obj->s2[obj->top2--];
    }
    obj->s1[++(obj->top1)] = value;
}

int cQueueDeleteHead(CQueue* obj) {
    // 如果top2的为-1,那就直接将s1的所有元素倾倒s2中,在对top2--
    if(obj->top2 == -1)
    {
        while(obj->top1 != -1)
            obj->s2[++(obj->top2)] = obj->s1[obj->top1--];
    }
    return obj->top2 == -1 ? -1 : obj->s2[obj->top2--];
}

void cQueueFree(CQueue* obj) {
    // 释放所有的空间
    free(obj->s1);
    free(obj->s2);
    free(obj);
}

/**
 * Your CQueue struct will be instantiated and called as such:
 * CQueue* obj = cQueueCreate();
 * cQueueAppendTail(obj, value);
 
 * int param_2 = cQueueDeleteHead(obj);
 
 * cQueueFree(obj);
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值