#include <stdio.h>
#include <stdlib.h>
typedef struct Queue {
int front; // 用不上front 指针,就是用循环队列的概念
int rear;
int data[26];
}Queue;
//初始化循环队列
int initQueue(Queue *&Q) {
Q = (Queue*)malloc(sizeof(Queue));
Q->front= Q->rear = 0;
}
//入队
int enQueue(Queue* Q, int data,int maxsize) {
Q->data[Q->rear] = data;
Q->rear = (Q->rear + 1) % maxsize;
return 1;
}
//打印队列
void printQueue(Queue* Q,int m,int maxsize) {
int x = Q->rear;
for (int i = 0; i < m; i++) {
printf("%c", Q->data[x]);
x = (x + 1)%maxsize;
}
printf("\n");
}
int main()
{
Queue *Q ;
int a[26],maxsize;
int i,j,k,n,m;//n行 m列
initQueue(Q);
for(i=0;i<26;i++){
a[i]=i+65;
}//给数组赋值。ASCII值
scanf("%d%d",&n,&m);
maxsize=m;
for(i=0;i<m;i++){
enQueue(Q,a[i],maxsize);
}//入队列
for(j=0;j<n;j++){
printQueue(Q,m,maxsize);
Q->rear = (Q->rear + 1) % maxsize;;
}
return 0;
}

先输入n m 确定行 和 列。
通过改变rear 指针的位置循环读取,我没有设置多的元素空间,我感觉这种循环不需要判空,也不需要判满。
循环队列的心脏:指针指向位置的循环 Q->rear = (Q->rear + 1) % maxsize;
写蓝桥杯基础题字母图形时候想出来的(错误思路,不过也记录一下,哈哈哈)
看着也挺有意思的是个对称矩阵
该博客介绍了一个使用循环队列实现的C语言程序,该程序根据输入的行数(n)和列数(m)生成一个对称字母矩阵。通过改变rear指针,程序循环读取并打印队列中的元素,形成一个对称的字母图案。博客探讨了循环队列在处理此类问题时的简洁性和有效性,并指出在这种情况下不需要考虑队列的满和空状态。
689

被折叠的 条评论
为什么被折叠?



