方法1,创建两个stack喽。插入时将数据放入stack1。删除时,如果stack2为空,则将stack1的所有值放入stack2,然后再删除stack2的栈顶元素。如果两个stack都为空,则返回-1。

    1. typedef struct {
    2. int *s1;
    3. int *s2;
    4. int ss1,ss2;
    5. } CQueue;
    6. CQueue* cQueueCreate() {
    7. CQueue * cq = (CQueue*)malloc(sizeof(CQueue));
    8. cq->s1 = (int*)malloc(10000*sizeof(int));
    9. cq->s2 = (int*)malloc(10000*sizeof(int));
    10. cq->ss1 = 0;
    11. cq->ss2 = 0;
    12. return cq;
    13. }
    14. void cQueueAppendTail(CQueue* obj, int value) {
    15. obj->s1[obj->ss1] = value;
    16. obj->ss1++;
    17. }
    18. int cQueueDeleteHead(CQueue* obj) {
    19. if (obj->ss2 == 0) {
    20. if (obj->ss1 == 0) return -1;
    21. int j = obj->ss2;
    22. for (int i = obj->ss1-1;i >= 0;i--) {
    23. obj->s2[j] = obj->s1[i];
    24. j++;
    25. }
    26. obj->ss2 = j;
    27. obj->ss1 = 0;
    28. }
    29. obj->ss2--;
    30. return obj->s2[obj->ss2];
    31. }
    32. void cQueueFree(CQueue* obj) {
    33. free(obj->s1);
    34. free(obj->s2);
    35. free(obj);
    36. }
    37. /**
    38. * Your CQueue struct will be instantiated and called as such:
    39. * CQueue* obj = cQueueCreate();
    40. * cQueueAppendTail(obj, value);
    41. * int param_2 = cQueueDeleteHead(obj);
    42. * cQueueFree(obj);
    43. */

    leedcode通过,输出结果为:

    1. 执行用时:364 ms, 在所有 C 提交中击败了54.32% 的用户
    2. 内存消耗:80.5 MB, 在所有 C 提交中击败了40.97% 的用户