idk why these stuffs get stashed for so long and I didn't ever commit them

This commit is contained in:
2025-11-06 09:43:54 +08:00
parent 5dbdfef1a1
commit e01c041259
232 changed files with 22806 additions and 1256 deletions

100
Chapter3/SqQueue/SqQueue.h Normal file
View File

@@ -0,0 +1,100 @@
template<class DT>
struct SqQueue
{
DT* base; // 存储空间基地址
int front; // 队头指针,指向队首元素
int rear; // 队尾指针,指向队尾元素的后面
int queuesize; // 队列容量
};
template<class DT> // 算法3.14 初始化队列
bool InitQueue(SqQueue<DT>& Q, int m) // 创建容量为m的空队列
{
Q.base = new DT[m]; // 1. 申请一组连续的内存空间
if (!Q.base) exit(1); // 申请失败,退出
Q.front = Q.rear = 0; // 2. 申请成功,为队列属性赋值
Q.queuesize = m;
return true; // 3. 返回true
}
template<class DT> // 算法3.15 销毁队列
void DestroyQueue(SqQueue<DT>& Q) // 销毁循环队列
{
delete[] Q.base; // 1. 释放循环队列占用的内存空间
Q.front = Q.rear = 0; // 2. 为队列属性赋值
Q.queuesize = 0;
}
template<class DT> // 算法3.16 入队
bool EnQueue(SqQueue<DT>& Q, DT e) // 在队尾插入一个新元素
{
if ((Q.rear + 1) % Q.queuesize == Q.front) // 1. 队满的情况
return false; // 无法入队返回false
Q.base[Q.rear] = e; // 2. 元素e放在队尾指针处
Q.rear = (Q.rear + 1) % Q.queuesize; // 队尾指针增1
return true; // 3. 返回true
}
template<class DT> // 算法3.17 出队
bool DeQueue(SqQueue<DT>& Q, DT& e) // 删除队头元素
{
if (Q.front == Q.rear) // 1. 队空的情况
return false; // 无法出队返回false
e = Q.base[Q.front]; // 2. 取队头元素赋值给e
Q.front = (Q.front + 1) % Q.queuesize; // 队头指针加1
return true; // 3. 返回true
}
template<class DT> // 算法3.18 取队头元素
bool GetHead(SqQueue<DT> Q, DT& e) // 取队头元素
{
if (Q.front == Q.rear) // 1. 队空的情况
return false; // 无队头元素返回false
e = Q.base[Q.front]; // 2. 取队头元素赋值给e
return true; // 3. 返回true
}
template<class DT>
bool GetTail(SqQueue<DT> Q, DT& e) // 取队尾元素
{
if (Q.front == Q.rear) // 1. 队空的情况
return false; // 无队尾元素返回false
e = Q.base[(Q.rear - 1 + Q.queuesize) % Q.queuesize]; // 2. 取队尾元素赋值给e
return true; // 3. 返回true
}
template<class DT>
int QueueLength(SqQueue<DT> Q) // 测表长
{
return (Q.rear - Q.front + Q.queuesize) % Q.queuesize;
}
template<class DT>
bool QueueEmpty(SqQueue<DT> Q) // 判队空
{
return Q.front == Q.rear;
}
template<class DT>
bool QueueFull(SqQueue<DT> Q) // 判队满
{
return (Q.rear + 1) % Q.queuesize == Q.front;
}
template<class DT>
void ClearQueue(SqQueue<DT>& Q) // 清空队
{
Q.front = Q.rear = 0;
}
template<class DT>
void DispQueue(SqQueue<DT> Q) // 显示队
{
int i = Q.front;
while (i != Q.rear)
{
cout << Q.base[i] << " ";
i = (i + 1) % Q.queuesize;
}
cout << endl;
}