第一步循环队列的骨架
最终作品第一步:在 CQueue 里写出 enqueue / dequeue(两个下标都要会绕)。容量 4,排满 4 个、叫走 1 个、再排进「北辰」,输出北辰落在哪一格。 (本题用 g++ -std=c++17 -O0 编译。)
第二步满和空都要挡住
给它加上 is_full / is_empty,并让 enqueue 满了返回 队列已满。容量 4 排满之后再排一个,输出这次的结果。 (本题用 g++ -std=c++17 -O0 编译。)
第三步再写一个双端队列
写一个 Deque,四个方法都要有:push_front / push_back / pop_front / pop_back。右端进三个人,然后从左端取一个,输出取到的是谁。 (本题用 g++ -std=c++17 -O0 编译。)
第四步拿队列分层遍历
用 std::queue 把这棵组织树一层一层走完,输出一共有几层。 (本题用 g++ -std=c++17 -O0 编译。)
交付三件套一起验收
这是这条路线的最终作品。把 CQueue(含 is_full / is_empty,dequeue 空时返回 队列为空)和 Deque 都写出来,再用队列做分层遍历,然后一次验完五条:容量 4 排满之后 is_full() 为真;叫走 1
越界时内存检查会怎样
循环队列的下标越出数组时,Makefile 里的 -fsanitize=address 会【0】。
修好队尾忘了绕回
场景:实验机上 ~/work/queue/cq.cpp 是一个循环队列:读入容量,再按 push / pop 指令排队叫号。排几轮以后就出错,带着内存检查一跑,报越界。 任务:修好 push 里的下标,让队尾走到末尾能绕回开头。make 编
修好判满判空
场景:~/work/queue/cq.cpp 是「空一格」的循环队列:cap 个格子最多放 cap-1 个,head 是队头,tail 是下一个要写的格子。可它一开始就说满了。 任务:修好 full(),让空和满各有各的判断条件。make
修好出队后的队头
场景:~/work/queue/cq.cpp 的循环队列每次叫号,叫到的都是同一个人。 任务:修好 pop,让队头在出队后往前挪(记得会绕回)。make 编译后用 sample.txt 自测。 可操作范围:只在分给你的这台实验机上操作。可以
补写左端入队
场景:~/work/queue/dq.cpp 是用环形数组做的双端队列,push_back、pop_front、pop_back 都写好了,只差 push_front。 任务:补全 push_front,不越界、不漏内存。make 之后用