循环队列—数组实现

来源:互联网 发布: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: ");}


原创粉丝点击