输入限制型双队列 #include <stdio.h> #include <stdlib.h> typedef struct _dqueue { int data; struct _dqueue* next; }DQUEUE; DQUEUE* rear = NULL; DQUEUE* front = NULL; /* 输入限制型 */ int dqueue_in(int value) { DQUEUE* dq = (DQUEUE*)malloc(sizeof(DQUEUE)); if(dq == NULL) { return 0; } dq->data = value; dq->next = NULL; if(front == NULL) { front = dq; } else { rear->next = dq; } rear = dq; return 1; } int dqueue_out_front(int* value) { DQUEUE* dq = NULL; if(front == NULL) { return 0; } dq = front; front = front->next; *value = dq->data; free(dq); return 1; } int dqueue_out_rear(int* value) { DQUEUE* dq = NULL; if(rear == NULL) { return 0; } if(rear == front) { *value = rear->data; free(rear); rear = NULL; front = NULL; } else { dq = front; while(dq->next != rear) { dq = dq->next; } *value = rear->data;; free(rear); rear = dq; rear->next = NULL; } return 1; } int main(int argc, char* argv[]) { int i = 0, res; int num[5] = {1, 2, 3, 4, 5}; for(i = 0;i < 5; i++) { dqueue_in(num[i]); } while(1) { printf("1.out_front; 2.out_rear; 3.exit =>"); scanf("%d", &res); if(res == 1) { if(dqueue_out_front(&res)) { printf("%d/n",res); } else { printf("null/n"); } } else if(res == 2) { if(dqueue_out_rear(&res)) { printf("%d/n",res); } else { printf("null/n"); } } else if(res == 3) { exit(0); } } return 0; } 输出限制型双队列 #include <stdio.h> #include <stdlib.h> typedef struct _dqueue { int data; struct _dqueue* next; }DQUEUE; DQUEUE* rear = NULL; DQUEUE* front = NULL; /* 输出限制型 */ int dqueue_out(int* value) { DQUEUE* dq = NULL; if(front == NULL) { return 0; } dq = front; front = front->next; *value = dq->data; free(dq); return 1; } int dqueue_in_rear(int value) { DQUEUE* dq = (DQUEUE*)malloc(sizeof(DQUEUE)); if(dq == NULL) { return 0; } dq->data = value; dq->next = NULL; if(front == NULL) { front = dq; } else { rear->next = dq; } rear = dq; return 1; } int dqueue_in_front(int value) { DQUEUE* dq = (DQUEUE*)malloc(sizeof(DQUEUE)); if(dq == NULL) { return 0; } dq->data = value; dq->next = front; front = dq; if(rear == NULL) { rear = dq; } return 1; } int dqueue_print() { DQUEUE* dq = front; while(dq) { printf("%5d", dq->data); dq = dq->next; } printf("/n"); return 1; } int main(int argc, char* argv[]) { int i = 0, res; while(1) { printf("1.in_front; 2.in_rear; 3.out; 4.exit =>"); scanf_s("%d",&res); fflush(stdin); if(res == 1) { printf("please input a interger: "); scanf_s("%d",&res); fflush(stdin); if(dqueue_in_front(res)) { printf("in_front success!/n"); dqueue_print(); } else { printf("in_front fail!/n"); } } else if(res == 2) { printf("please input a interger: "); scanf_s("%d",&res); fflush(stdin); if(dqueue_in_rear(res)) { printf("in_rear success!/n"); dqueue_print(); } else { printf("in_rear fail!/n"); } } else if(res == 3) { if(dqueue_out(&res)) { printf("%d/n", res); } } else if(res == 4) { exit(0); } } return 0; }