code1:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAXSIZE 65533 #define bool int #define true 1 #define false 0 typedef int KeyType; typedef struct queue { KeyType * key; int front; int rear; int count; }Queue; /* 定义所有函数 */ Queue * CreateQueue(); bool QueueIsEmpty(); bool QueueIsFull(); int QueueItemCount(); bool QueueAdd(); bool QueueRemove(); KeyType GetQueueFront(); KeyType GetQueueRear(); void TraverseQueue(); bool ClearQueue(); void DeleteQueue(); //建立队列 Queue * CreateQueue(void) { Queue * p; p = (Queue*)malloc(sizeof(Queue)); p->key = (KeyType*)malloc(sizeof(KeyType)); p->count = 0; p->rear = 0; p->front = 0; return p; } //判断队列是否为空 bool QueueIsEmpty(Queue * p) { return (p->count == 0) ? true : false; } //判断队列是否已满 bool QueueIsFull(Queue * p) { return (p->count == MAXSIZE) ? true : false; } //返回当前队列元素的个数 int QueueItemCount(Queue * p) { return p->count; } //入队 bool QueueAdd(Queue * p, KeyType DATA) { if(QueueIsFull(p)) return false; p->key[p->rear++] = DATA; p->count++; return true; } //出队 bool QueueRemove(Queue * p) { if(QueueIsEmpty(p)) return false; p->front++; p->count--; return true; } //返回队首元素 KeyType GetQueueFront(Queue * p) { if(QueueIsEmpty(p)) return false; return p->key[p->front]; } //返回队尾元素 KeyType GetQueueRear(Queue * p) { if(QueueIsEmpty(p)) return false; return p->key[p->rear - 1]; } // 遍历队列 void TraverseQueue(Queue * p) { for(int i = p->front; i < p->rear; i++) printf("%d ", p->key[i]); printf(" "); } // 清空队列 bool ClearQueue(Queue * p) { for(int i = p->front; i < p->rear; i++) p->key[i] = 0; p->count = 0; p->front = 0; p->rear = 0; return true; } // 删除队列 void DeleteQueue(Queue * p) { if(p != NULL) { ClearQueue(p); free(p); p = NULL; } } int main() { Queue*h = CreateQueue(); KeyType val; char c; puts("按 1 查看 按 2 入队"); puts("按 3 出队 按 4 返回队首元素"); puts("按 5 返回队尾元素 按 6 当前队列长度"); puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') { switch(c) { case '1': puts("队列:"); TraverseQueue(h); break; case '2': puts("输入数据:"); scanf("%d", &val); if(QueueAdd(h, val)) puts("已加入!"); else puts("添加失败!"); break; case '3': if(QueueRemove(h)) puts("已移除!"); else puts("移除失败!"); break; case '4': printf(" 当前队首元素为:%d ", GetQueueFront(h)); break; case '5': printf(" 当前队尾元素为:%d ", GetQueueRear(h)); break; case '6': printf(" 当前队列个数为:%d ", QueueItemCount(h)); break; case '7': if(ClearQueue(h)) puts("已清空!"); break; } } DeleteQueue(h); return 0; }
code2:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAXSIZE 65533 #define bool int #define true 1 #define false 0 typedef int KeyType; typedef struct queue { KeyType * key; int front; int rear; }Queue; /* 定义所有函数 */ Queue * CreateQueue(); bool QueueIsEmpty(); bool QueueIsFull(); int QueueItemCount(); bool QueueAdd(); bool QueueRemove(); KeyType GetQueueFront(); KeyType GetQueueRear(); void TraverseQueue(); bool ClearQueue(); void DeleteQueue(); //建立队列 Queue * CreateQueue(void) { Queue * p; p = (Queue*)malloc(sizeof(Queue)); p->key = (KeyType*)malloc(sizeof(KeyType)); p->rear = 0; p->front = 0; return p; } //判断队列是否为空 bool QueueIsEmpty(Queue * p) { return (p->front == p->rear) ? true : false; } //判断队列是否已满 bool QueueIsFull(Queue * p) { return ((p->rear + 1)%MAXSIZE == p->front) ? true : false; } //返回当前队列元素的个数 int QueueItemCount(Queue * p) { return (p->rear - p->front + MAXSIZE) % MAXSIZE; } //入队 bool QueueAdd(Queue * p, KeyType DATA) { if(QueueIsFull(p)) return false; p->key[p->rear++] = DATA; return true; } //出队 bool QueueRemove(Queue * p) { if(QueueIsEmpty(p)) return false; p->front++; return true; } //返回队首元素 KeyType GetQueueFront(Queue * p) { if(QueueIsEmpty(p)) return false; return p->key[p->front]; } //返回队尾元素 KeyType GetQueueRear(Queue * p) { if(QueueIsEmpty(p)) return false; return p->key[p->rear - 1]; } // 遍历队列 void TraverseQueue(Queue * p) { for(int i = p->front; i < p->rear; i++) printf("%d ", p->key[i]); printf(" "); } // 清空队列 bool ClearQueue(Queue * p) { for(int i = p->front; i < p->rear; i++) p->key[i] = 0; p->front = 0; p->rear = 0; return true; } // 删除队列 void DeleteQueue(Queue * p) { if(p != NULL) { ClearQueue(p); free(p); p = NULL; } } int main() { Queue*h = CreateQueue(); KeyType val; char c; puts("按 1 查看 按 2 入队"); puts("按 3 出队 按 4 返回队首元素"); puts("按 5 返回队尾元素 按 6 当前队列长度"); puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') { switch(c) { case '1': puts("队列:"); TraverseQueue(h); break; case '2': puts("输入数据:"); scanf("%d", &val); if(QueueAdd(h, val)) puts("已加入!"); else puts("添加失败!"); break; case '3': if(QueueRemove(h)) puts("已移除!"); else puts("移除失败!"); break; case '4': printf(" 当前队首元素为:%d ", GetQueueFront(h)); break; case '5': printf(" 当前队尾元素为:%d ", GetQueueRear(h)); break; case '6': printf(" 当前队列个数为:%d ", QueueItemCount(h)); break; case '7': if(ClearQueue(h)) puts("已清空!"); break; } } DeleteQueue(h); return 0; }