ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指offer_09 用两个栈实现队列

2022-04-05 20:00:07  阅读:164  来源: 互联网

标签:obj offer 队列 CQueue 09 ret int inStack Stack


 //思路在剑指offer书的图里,很容易理解。这里由于c没有API,所以要先定义Stack结构体,不像JavaScript有已经定义好的结构体。并且一些如弹入弹出的操作,也需要自己定义。
1 typedef struct { 2 int* stk; 3 int stkSize; 4 int stkCapacity; 5 } Stack; 6 7 Stack* stackCreate(int cpacity) { 8 Stack* ret = malloc(sizeof(Stack)); 9 ret->stk = malloc(sizeof(int) * cpacity); 10 ret->stkSize = 0; 11 ret->stkCapacity = cpacity; 12 return ret; 13 } 14 15 void stackPush(Stack* obj, int value) { 16 obj->stk[obj->stkSize++] = value; 17 } 18 19 void stackPop(Stack* obj) { 20 obj->stkSize--; 21 } 22 23 int stackTop(Stack* obj) { 24 return obj->stk[obj->stkSize - 1]; 25 } 26 27 bool stackEmpty(Stack* obj) { 28 return obj->stkSize == 0; 29 } 30 31 void stackFree(Stack* obj) { 32 free(obj->stk); 33 } 34 35 typedef struct { 36 Stack* inStack; 37 Stack* outStack; 38 } CQueue; 39 40 CQueue* cQueueCreate() { 41 CQueue* ret = malloc(sizeof(CQueue)); 42 ret->inStack = stackCreate(10000); 43 ret->outStack = stackCreate(10000); 44 return ret; 45 } 46 47 void in2out(CQueue* obj) { 48 while (!stackEmpty(obj->inStack)) { 49 stackPush(obj->outStack, stackTop(obj->inStack)); 50 stackPop(obj->inStack); 51 } 52 } 53 54 void cQueueAppendTail(CQueue* obj, int value) { 55 stackPush(obj->inStack, value); 56 } 57 58 int cQueueDeleteHead(CQueue* obj) { 59 if (stackEmpty(obj->outStack)) { 60 if (stackEmpty(obj->inStack)) { 61 return -1; 62 } 63 in2out(obj); 64 } 65 int x = stackTop(obj->outStack); 66 stackPop(obj->outStack); 67 return x; 68 } 69 70 void cQueueFree(CQueue* obj) { 71 stackFree(obj->inStack); 72 stackFree(obj->outStack); 73 }

 

标签:obj,offer,队列,CQueue,09,ret,int,inStack,Stack
来源: https://www.cnblogs.com/YoungP7/p/16103628.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有