循环队列—数组实现
来源:互联网 发布:thinsulate 知乎 编辑:程序博客网 时间:2024/05/19 09:01
/* circular queue: 牺牲一个存储节点,对头front指示的节点不用于存储数据,起标志性作用 * front: 队头元素的前一个位置 * rear: 队尾元素 */#include<stdio.h>#include<stdlib.h>#define MAX10 //size of queueint insertCircularQueue(int queue[], int front,int *rear, int value);int delCircularQueue(int queue[], int *front, int rear, int *value);void printQueue(int queue[], int front, int rear);void item();int queue[MAX];int front =0;//与初始值无关 0也也可以int rear = 0;main(void){char item_choice;int n;item();while(1) { item_choice = getchar(); switch (item_choice) { case '1': printf("Insert a element to the queue: "); scanf("%d", &n); insertCircularQueue(queue, front,&rear, n); printf("\nQueue: "); printQueue(queue, front, rear); putchar('\n'); item(); break; case '2': printf("Get an element from the queue: "); delCircularQueue(queue, &front, rear, &n); printf("Element: %d\n", n); printf("Queue: "); printQueue(queue, front, rear); putchar('\n'); item(); break; case '0': printf("Good luck to you!\n"); return 0; } } return;}/* insert a element into the end of queue *//* 插入队尾,只有队尾值会改变,所以队尾要传入指针,而队头只需传入值即可 */int insertCircularQueue(int queue[], int front, int *rear, int value){*rear = (*rear + 1)%MAX;if(*rear == front) {printf("Queue overflow\n");exit(-1);} queue[*rear] = value;return 0;}/* delete an element at the head of queue *//* 删除在对头,只有队头值会改变,所以队头要传入指针,而队尾只需传入值即可 */int delCircularQueue(int queue[], int *front, int rear, int *value){if(*front == rear) {printf("Queue underflow\n");exit(-1);}*front = (*front+1)%MAX;*value = queue[*front];return 0;}/* print content of the queue, we use {} to contaion queue elements*/void printQueue(int queue[], int front, int rear){int i;if(front == -1)printf("{");for(i=0; i<MAX; i++) { printf("%d ", queue[i]);if(i == front)printf("{ ");if(i == rear)printf("} ");}putchar('\n');}void item(){ printf("*************** Welcome to the Queue *************\n"); printf("1: Insert one element;\n"); printf("2: Delete one element;\n"); printf("0: Exit.\n"); printf("*************************************************\n"); printf("Select your operation: ");}