1.输入限制性双队列:
代码:InLimitDeQueue.c
#include<stdio.h> #include<stdlib.h> typedef struct _queue { int data; struct _queue *next; }QUEUE; QUEUE * rear = NULL; QUEUE * front = NULL; //输入限制型双队列 int InQueue(int value) { QUEUE * q = (QUEUE *)malloc(sizeof(QUEUE)); if(q == NULL) return 0; q->data = value; q->next = NULL; if(front == NULL) front = q; else rear->next = q; rear = q; return 1; } int OutQueueByFront(int *value) { QUEUE * p = NULL; if(front == NULL) return 0; p = front; front = front->next; *value = p->data; free(p); return 1; } int OutQueueByRear(int *value) { QUEUE *p = NULL; if(rear == NULL) return 0; //只有一个数据 if(rear == front) { *value = rear->data; free(rear); rear = NULL; front = NULL; }else{ p = front; //使p指向最后一个的前面一个 while(p->next != rear) p = p->next; *value = rear->data; free(rear); rear = p; rear->next = NULL; } return 1; } void main() { int res,i,arr[5] = {1,2,3,4,5}; for(i = 0;i<5;i++) InQueue(arr[i]); while(1) { printf("1.从队头取出;2.从队尾取出;3.退出:"); scanf("%d",&res); //清空输入缓冲区 fflush(stdin); if(res == 1) { if(OutQueueByFront(&res) == 1) printf("取出的值为:%d\n",res); else printf("队列为空!\n"); }else if(res == 2) { if(OutQueueByRear(&res) == 1) printf("取出的值为:%d\n",res); else printf("队列为空!\n"); }else if(res == 3) { exit(0); } } }
运行效果:
存入队列的元素为1,2,3,4,5
2.输出限制性双队列:
代码:OutLimitDeQueue.c
#include<stdio.h> #include<stdlib.h> typedef struct _queue { int data; struct _queue *next; }QUEUE; QUEUE * rear = NULL; QUEUE * front = NULL; //输出限制型双队列 int OutQueue(int *value) { QUEUE *p = NULL; if(front == NULL) return 0; p = front; front = front->next; *value = p->data; free(p); return 1; } int InQueueByRear(int value) { QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE)); if(q == NULL) return 0; q->data = value; q->next = NULL; if(rear == NULL) front = q; else rear->next = q; rear = q; return 1; } int InQueueByFront(int value) { QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE)); if(q == NULL)return 0; q->data = value; q->next = front; front = q; if(rear == NULL) rear = q; return 1; } void PrintQueue() { QUEUE *p = front; while(p) { printf("%5d",p->data); p = p->next; } printf("\n"); } void main() { int res; while(1) { printf("1.从队头存入;2.从队尾存入;3.退出"); scanf("%d",&res); fflush(stdin); if(res == 1) { printf("请输入要存入的值:"); scanf("%d",&res); fflush(stdin); if(InQueueByFront(res)) { PrintQueue(); }else printf("存入失败\n"); }else if(res == 2) { printf("请输入要存入的值:"); scanf("%d",&res); fflush(stdin); if(InQueueByRear(res)) { PrintQueue(); }else printf("存入失败\n"); }else if(res == 3) break; } }