- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
- You must use only standard operations of a stack -- which means only
push to top
,peek/pop from top
,size
, andis empty
operations are valid. - Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
- You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
用兩個Stack實作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | typedef struct { int *inbox; int *outbox; int inboxsize; int outboxsize; } Queue; /* Create a queue */ void queueCreate(Queue *queue, int maxSize) { //queue = malloc(sizeof(Queue)); queue->inbox=(int *)malloc(sizeof(int)*maxSize); queue->outbox=(int *)malloc(sizeof(int)*maxSize); queue->inboxsize=0; queue->outboxsize=0; } /* Push element x to the back of queue */ void queuePush(Queue *queue, int element) { queue->inbox[queue->inboxsize++]=element; } /* Removes the element from front of queue */ void queuePop(Queue *queue) { if(queue->outboxsize==0){ while(queue->inboxsize!=0){ queue->outbox[(queue->outboxsize)++]=queue->inbox[-- (queue->inboxsize)]; } } return queue->outbox[-- (queue->outboxsize)]; } /* Get the front element */ int queuePeek(Queue *queue) { if(queue->outboxsize==0){ while(queue->inboxsize!=0){ queue->outbox[(queue->outboxsize)++]=queue->inbox[-- (queue->inboxsize)]; } } return queue->outbox[ (queue->outboxsize) -1]; } /* Return whether the queue is empty */ bool queueEmpty(Queue *queue) { if(queue->inboxsize==0 && queue->outboxsize==0 ||queue==NULL)return true; else return false; } /* Destroy the queue */ void queueDestroy(Queue *queue) { //queue=NULL; free(queue->inbox); free(queue->outbox); //free(queue);//out side caller will free } |
沒有留言:
張貼留言