循环队列
C语言
1 typedef struct { 2 int front; 3 int rear; 4 int capcity; 5 int* Elements; 6 } MyCircularQueue; 7 8 9 MyCircularQueue* myCircularQueueCreate(int k) { 10 MyCircularQueue* obj = malloc(sizeof(MyCircularQueue)); 11 obj -> front = 0; 12 obj -> rear = 0; 13 obj -> capcity = k + 1; 14 obj -> Elements = malloc((k + 1) * sizeof(int)); 15 return obj; 16 } 17 18 bool myCircularQueueIsEmpty(MyCircularQueue* obj) { 19 if(obj -> front == obj -> rear) return true; 20 return false; 21 } 22 23 bool myCircularQueueIsFull(MyCircularQueue* obj) { 24 if((obj -> rear + 1) % obj -> capcity == obj -> front) return true; 25 return false; 26 } 27 28 bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) { 29 if(myCircularQueueIsFull(obj)) return false; 30 obj -> Elements[obj -> rear] = value; 31 obj -> rear = (obj -> rear + 1) % obj -> capcity; 32 return true; 33 } 34 35 bool myCircularQueueDeQueue(MyCircularQueue* obj) { 36 if(myCircularQueueIsEmpty(obj)) return false; 37 obj -> front = (obj -> front + 1) % obj -> capcity; 38 return true; 39 } 40 41 int myCircularQueueFront(MyCircularQueue* obj) { 42 if(myCircularQueueIsEmpty(obj)) return -1; 43 return obj -> Elements[obj -> front]; 44 } 45 46 int myCircularQueueRear(MyCircularQueue* obj) { 47 if(myCircularQueueIsEmpty(obj)) return -1; 48 return obj -> Elements[(obj -> rear - 1 + obj -> capcity) % obj -> capcity]; 49 } 50 51 void myCircularQueueFree(MyCircularQueue* obj) { 52 free(obj -> Elements); 53 free(obj); 54 } 55 56 /** 57 * Your MyCircularQueue struct will be instantiated and called as such: 58 * MyCircularQueue* obj = myCircularQueueCreate(k); 59 * bool param_1 = myCircularQueueEnQueue(obj, value); 60 61 * bool param_2 = myCircularQueueDeQueue(obj); 62 63 * int param_3 = myCircularQueueFront(obj); 64 65 * int param_4 = myCircularQueueRear(obj); 66 67 * bool param_5 = myCircularQueueIsEmpty(obj); 68 69 * bool param_6 = myCircularQueueIsFull(obj); 70 71 * myCircularQueueFree(obj); 72 */

浙公网安备 33010602011771号