剑指offer面试题09

一个很大的收获是对于函数内调用free的认识加深
引用指针是在栈中复制了一个与原指针相同的镜像,但是二者都是指向同一片空间,free只需要通过参数得到空间的地址,因此效果是一样的,而创建链表时,修改了指针参数,free函数本质上没有修改指针参数

#define STACK_SIZE 10001

typedef struct {
    int stack1_len;
    int stack2_len;
    int* stack1;
    int* stack2;
} CQueue;


CQueue* cQueueCreate() {
    CQueue* que = (CQueue*)malloc(sizeof(CQueue));
    if(!que) exit(-1);
    que->stack1_len = 0;
    que->stack2_len = 0;
    que->stack1 = (int*)malloc(sizeof(int)*STACK_SIZE);
    que->stack2 = (int*)malloc(sizeof(int)*STACK_SIZE);
    return que;
}
/*要么进易出难,反之*/
//选择进易出难
void cQueueAppendTail(CQueue* obj, int value) {
    if(obj->stack1_len >= STACK_SIZE-1)
    {
        printf("栈满");
        exit(-1);
    }
    /*入栈就如栈1*/
    obj->stack1[obj->stack1_len++] = value;
}

int cQueueDeleteHead(CQueue* obj) {
    /*利用栈二出栈*/
    //栈二有数据,直接出栈即可
    if(obj->stack2_len > 0)
    {
        return obj->stack2[--obj->stack2_len];
    }
    else if(obj->stack1_len > 0)//栈二无数据,将栈1数据转移
    {
        //转移数据
        while(obj->stack1_len > 0)
        {
            obj->stack2[obj->stack2_len++] = obj->stack1[--obj->stack1_len];
        }
        //转移完毕,出栈2
        return obj->stack2[--obj->stack2_len];
    }
    else//两栈皆空
    {
        return -1;
    }
}

void cQueueFree(CQueue* obj) {
    free(obj->stack1);
    free(obj->stack2);
    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);
*/
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值