[数据结构] 用C语言模拟一个简单的队列程序
#include<stdio.h> #include <stdlib.h> #include<string.h> #include<math.h> //队列长度自定义 #define ASIZE 1001 #define MAX_INT 2147483647 typedef struct quque { int data[ASIZE]; int front; int rear; }Queue; //空0,满-1,正常 1 int notEmpty(Queue *queue) { if ((*queue).front == (*queue).rear) return 0; else if ( ((*queue).rear+1)%ASIZE == (*queue).front ) return -1; else return 1; } //测量队列长度 int lengthOfQueue (Queue (*queue)) { if ((*queue).rear >= (*queue).front) return (*queue).rear-(*queue).front; else return (*queue).rear + ASIZE - (*queue).front; } //push void pushToQueue(Queue (*queue), int one) { if (notEmpty(queue) == -1) { printf("⚐队列已满,无法PUSH"); return;//队满 } (*queue).data[(*queue).rear] = one; (*queue).rear = ((*queue).rear +1)%ASIZE; } //pop,队空返回max_int int popFromQueue(Queue (*queue)) { if (!notEmpty(queue)) { printf("⚐队列为空,无法POP"); return MAX_INT; } int pop = (*queue).data[(*queue).front]; (*queue).front = ((*queue).front + 1)%ASIZE; return pop; } //仅读取队首,不出队 int readTopOfQueue(Queue (*queue)) { if (notEmpty(queue)) return (*queue).data[(*queue).front]; else { printf("⚐队列为空,无法读取"); return -1; } } //创建队列 Queue* creatAQueue() { Queue *queue = (Queue *)malloc(sizeof(Queue)); (*queue).front = 0; (*queue).rear = 0; return queue; } //打印队列 void printQueue(Queue (*queue)) { if ((*queue).front == (*queue).rear) { printf("\n⚐队列为空\n"); return; } printf("\n队首的下标为 %d ,队尾的下标为 %d \n队列为:",(*queue).front,(*queue).rear); for (int i = (*queue).front ; i != (*queue).rear ; i = (i+1)%ASIZE ) { printf (" %d ",(*queue).data[i]); } printf("\n"); } int main() { Queue *queue = creatAQueue(); int order; int one; while (1) { printf("\n☀︎命令:1-进行入队操作,2-进行出队操作,3-打印队列\n✎请输入指令:"); scanf("%d",&order); switch (order) { case 1: printf("\n✎请输入需要入队的数值:"); scanf("%d",&one); if (notEmpty(queue) == -1) { printf("\n⚐队列已满\n"); break; } pushToQueue(queue,one); break; case 2: if (notEmpty(queue) == 0) { printf("\n⚐队列还是空的哟~\n"); break; } one = popFromQueue(queue); printf("\n出队的数据为%d\n",one); break; case 3: printQueue(queue); break; default: printf("\n⚐指令有误\n"); break; } } return 0; }