队列
问:给定一串数字{0, 6, 3, 1, 7, 5, 8, 9, 2, 4},把第一个数字出队,将第二个数字放到最后;把第三个数字出队,将第四个数字放到最后;把第五个数字出队,第六个数字放到最后。以此类推,知道没有数字量,打印出所有删除的数字。
#include <stdio.h>
int main() {
int q[101] = {0, 6, 3, 1, 7, 5, 8, 9, 2, 4}; // 初始化数组
int head = 1, tail = 10; // 初始化头尾指针
while (head < tail) {
printf("%d ", q[head]); // 打印头指针指向的元素
head++; // 移动头指针到下一个位置
q[tail] = q[head]; // 将头指针指向的元素复制到尾指针指向的位置
tail++; // 移动尾指针到下一个位置
head++; // 移动头指针到下一个位置
}
getchar(); // 等待用户按下回车键
getchar(); // 等待用户按下回车键
return 0; // 返回程序结束标志
}
PS,将tail初始只指向在队列的下一个位置,为了避免和头指针重合。
通常,我们会定义结构体,将数组,head,tail放在外面,增加对队列的理解。
#include <stdio.h>
// 定义队列结构体
struct queue {
int data[100];
int head;
int tail;
};
int main() {
struct queue q;
int i;
q.head = 0; // 初始化队列头
q.tail = 0; // 初始化队列尾
// 从用户输入中填充队列
for (i = 0; i < 9; i++) {
scanf("%d", &q.data[q.tail]);
q.tail++;
}
// 输出队列中的元素
while (q.head < q.tail) {
printf("%d ", q.data[q.head]);
q.head++;
// 移动数据以填充空出的位置,这可以减少数据复制操作
if (q.head < q.tail) {
q.data[q.tail] = q.data[q.head];
q.tail++;
}
}
getchar(); // 等待用户按下回车键
getchar(); // 等待用户按下回车键
return 0; // 返回程序结束标志
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通