用循环队列让字符循环

该博客介绍了一个使用循环队列实现的C语言程序,该程序根据输入的行数(n)和列数(m)生成一个对称字母矩阵。通过改变rear指针,程序循环读取并打印队列中的元素,形成一个对称的字母图案。博客探讨了循环队列在处理此类问题时的简洁性和有效性,并指出在这种情况下不需要考虑队列的满和空状态。
#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;

写蓝桥杯基础题字母图形时候想出来的(错误思路,不过也记录一下,哈哈哈)

看着也挺有意思的是个对称矩阵

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值