sqqueue.cpp ```cpp #include <iostream> const int MaxSize = 100; // 定义队列的最大容量 // 定义队列结构体 typedef struct { char data[MaxSize]; // 存储队列元素的数组 int front, rear; // 队头和队尾指针 } SqQueue; // 初始化队列 void InitQueue(SqQueue &q) { q.front = q.rear = 0; // 队头和队尾指针都初始化为0 } // 判断队列是否为空 bool QueueEmpty(SqQueue q) { return q.front == q.rear; // 队头和队尾指针相等时队列为空 } // 进队列操作 bool EnQueue(SqQueue &q, char e) { if ((q.rear + 1) % MaxSize == q.front) // 队列满的判断条件 return false; q.data[q.rear] = e; // 将元素e放入队尾 q.rear = (q.rear + 1) % MaxSize; // 队尾指针后移 return true; } // 输出队列序列 void PrintQueue(SqQueue q) { int i = q.front; while (i != q.rear) { std::cout << q.data[i] << " "; // 输出队列元素 i = (i + 1) % MaxSize; // 指针后移 } std::cout << std::endl; } // 释放队列(在顺序队列中,由于使用数组,不需要额外释放操作) void DestroyQueue(SqQueue &q) { // 重置队头和队尾指针 q.front = q.rear = 0; } ``` exp3-10.cpp ```cpp #include <iostream> #include "sqqueue.cpp" int main() { SqQueue q; // (1)初始化队列q InitQueue(q); // (2)判断队列q是否为空 if (QueueEmpty(q)) std::cout << "队列q为空" << std::endl; else std::cout << "队列q不为空" << std::endl; // (3)依次进队列元素a、b、c、d、e EnQueue(q, 'a'); EnQueue(q, 'b'); EnQueue(q, 'c'); EnQueue(q, 'd'); EnQueue(q, 'e'); // (4)判断队列q是否为非空 if (!QueueEmpty(q)) std::cout << "队列q非空" << std::endl; else std::cout << "队列q为空" << std::endl; // (5)输出队列序列 std::cout << "队列序列为: "; PrintQueue(q); // (6)判断队列q是否为非空 if (!QueueEmpty(q)) std::cout << "队列q非空" << std::endl; else std::cout << "队列q为空" << std::endl; // (7)释放队列 DestroyQueue(q); return 0; } ``` 额外需要注意的逻辑点 1. 顺序队列的判满条件是`(q.rear + 1) % MaxSize == q.front`,要理解这种循环队列的判满方式,避免队列溢出。 2. 进队列和出队列操作时,队头和队尾指针的移动要使用`(i + 1) % MaxSize`,以实现循环队列的功能。 3. 顺序队列使用数组存储元素,在释放队列时,只需要重置队头和队尾指针,不需要进行额外的内存释放操作。 [2025-06-07 20:13:32 | AI写代码神器 | 874点数解答]