队列 ###################################### .. figure:: 队列/2023-09-23-22-01-10.png :align: center :figwidth: 550px 队列 代码 ********************************************* .. code-block:: c #include #include #define ElementType int //存储数据元素的类型 #define MAXSIZE 6 //存储数据元素的最大个数 #define ERROR -99 //ElementType的特殊值,标志错误 typedef struct { ElementType data[MAXSIZE]; int front; //记录队列头元素位置 int rear; //记录队列尾元素位置 int size; //存储数据元素的个数 }Queue; Queue* CreateQueue() { Queue* q = (Queue*)malloc(sizeof(Queue)); if (!q) { printf("空间不足\n"); return NULL; } q->front = -1; q->rear = -1; q->size = 0; return q; } int IsFullQ(Queue* q) { return (q->size == MAXSIZE); } void AddQ(Queue* q, ElementType item) { if (IsFullQ(q)) { printf("队列已满\n"); return; } q->rear++; q->rear %= MAXSIZE; q->size++; q->data[q->rear] = item; } int IsEmptyQ(Queue* q) { return (q->size == 0); } ElementType DeleteQ(Queue* q) { if (IsEmptyQ(q)) { printf("空队列\n"); return ERROR; } q->front++; q->front %= MAXSIZE; //0 1 2 3 4 5 q->size--; return q->data[q->front]; } void PrintQueue(Queue* q) { if (IsEmptyQ(q)) { printf("空队列\n"); return; } printf("打印队列数据元素:\n"); int index = q->front; int i; for (i = 0; i < q->size; i++) { index++; index %= MAXSIZE; printf("%d ", q->data[index]); } printf("\n"); } int main(int argc, const char * argv[]) { Queue* q = CreateQueue(); AddQ(q, 0); PrintQueue(q); AddQ(q, 1); PrintQueue(q); AddQ(q, 2); PrintQueue(q); AddQ(q, 3); PrintQueue(q); AddQ(q, 4); PrintQueue(q); AddQ(q, 5); PrintQueue(q); DeleteQ(q); PrintQueue(q); DeleteQ(q); PrintQueue(q); DeleteQ(q); PrintQueue(q); AddQ(q, 6); PrintQueue(q); AddQ(q, 7); PrintQueue(q); AddQ(q, 8); PrintQueue(q); return 0; } 结果 ********************************************* .. code-block:: 打印队列数据元素: 0 打印队列数据元素: 0 1 打印队列数据元素: 0 1 2 打印队列数据元素: 0 1 2 3 打印队列数据元素: 0 1 2 3 4 打印队列数据元素: 0 1 2 3 4 5 打印队列数据元素: 1 2 3 4 5 打印队列数据元素: 2 3 4 5 打印队列数据元素: 3 4 5 打印队列数据元素: 3 4 5 6 打印队列数据元素: 3 4 5 6 7 打印队列数据元素: 3 4 5 6 7 8