- 前言
- sqQueue.cpp(顺序循环队列)
- linkQueue.cpp(链队列)
- 总结
- 参考资料
- 作者的话
数据结构中顺序循环队列和链队列的C/C++语言描述实现模板,有详细的步骤解析及使用示例。
sqQueue.cpp(顺序循环队列)
//头文件———————————————————— #include//命名空间———————————————————— using namespace std; //宏———————————————————— #define MaxSize 100 //队列的最大大小 //自定义数据类型———————————————————— typedef int ElemType; //数据的(数据)类型 依据数据的实际类型定义 //结构体 //顺序循环队列 typedef struct SqQueue { ElemType data[MaxSize]; //数据 int front; //队头指针 定义为指向队头元素位置 出队:先出后移 int rear; //队尾指针 定义为指向队尾元素位置的下一个位置 入队:先入后移 } SqQueue; //函数声明———————————————————— void use_example(); //使用示例 void init(SqQueue &sqQueue); //初始化 bool enQueue(SqQueue &sqQueue, ElemType elem); //入队 bool deQueue(SqQueue &sqQueue, ElemType &elem); //出队 //主函数———————————————————— int main() { use_example(); //使用示例 return 0; } //函数定义———————————————————— //使用示例 void use_example() { //创建 SqQueue sqQueue; //初始化 init(sqQueue); cout << sqQueue.front << endl; //输出:0 cout << sqQueue.rear << endl; //输出:0 //入队 ElemType elem1 = 100; ElemType elem2 = 200; ElemType elem3 = 300; enQueue(sqQueue, elem1); enQueue(sqQueue, elem2); enQueue(sqQueue, elem3); //元素在栈中的排列:100,200,300 //出队 ElemType elem4 = 0; ElemType elem5 = 0; deQueue(sqQueue, elem4); deQueue(sqQueue, elem5); cout << elem4 << endl; //输出:100 cout << elem5 << endl; //输出:200 return; } //初始化 void init(SqQueue &sqQueue) //参数:队列 { //定义队头指针和队尾指针指向索引/位置0为队空 sqQueue.front = 0; sqQueue.rear = 0; } //入队 //时间复杂度:O(1) bool enQueue(SqQueue &sqQueue, ElemType elem) //参数:队列,元素 { if ((sqQueue.rear + 1) % MaxSize == sqQueue.front) //队满 { return false; } sqQueue.data[sqQueue.rear] = elem; //元素入队 sqQueue.rear = (sqQueue.rear + 1) % MaxSize; //队尾指针循环+1 return true; } //出队 //时间复杂度:O(1) bool deQueue(SqQueue &sqQueue, ElemType &elem) //参数:队列,元素 { if (sqQueue.front == sqQueue.rear) //队空 { return false; } elem = sqQueue.data[sqQueue.front]; //获取、保存元素 sqQueue.front = (sqQueue.front + 1) % MaxSize; //队头指针循环+1 元素出队 return true; }
linkQueue.cpp(链队列)
//头文件———————————————————— #include//命名空间———————————————————— using namespace std; //自定义数据类型———————————————————— typedef int ElemType; //数据的(数据)类型 依据数据的实际类型定义 //结构体 //链队列结点 typedef struct LinkNode { ElemType data; //数据 struct LinkNode *next; //指针 } LinkNode; //链队列 //因为需要保存两个结点指针,所以新定义结构体封装 typedef struct LinkQueue { LinkNode *front; //队头结点指针 LinkNode *rear; //队尾结点指针 } LinkQueue; //函数声明———————————————————— void use_example(); //使用示例 void init(LinkQueue &linkQueue); //初始化 void enQueue(LinkQueue &linkQueue, ElemType elem); //入队 bool deQueue(LinkQueue &linkQueue, ElemType &elem); //出队 //主函数———————————————————— int main() { use_example(); //使用示例 return 0; } //函数定义———————————————————— //使用示例 void use_example() { //创建 LinkQueue linkQueue; //队列 //初始化 init(linkQueue); //入队 ElemType elem1 = 100; ElemType elem2 = 200; ElemType elem3 = 300; enQueue(linkQueue, elem1); enQueue(linkQueue, elem2); enQueue(linkQueue, elem3); //元素在栈中的排列:100,200,300 //出队 ElemType elem4 = 0; ElemType elem5 = 0; deQueue(linkQueue, elem4); deQueue(linkQueue, elem5); cout << elem4 << endl; //输出:100 cout << elem5 << endl; //输出:200 return; } //初始化 void init(LinkQueue &linkQueue) //参数:队列 { linkQueue.front = linkQueue.rear = (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点 队列的队头、尾结点指针指向头结点 linkQueue.front->next = nullptr; //头结点的指针指向空 即:linkQueue.rear->next = nullptr; } //入队 //时间复杂度:O(1) void enQueue(LinkQueue &linkQueue, ElemType elem) //参数:队列,元素 { LinkNode *newNode; //新结点指针 newNode = (LinkNode *)malloc(sizeof(LinkNode)); //创建新结点 newNode->data = elem; //初始化新结点的数据 //入队 linkQueue.rear->next = newNode; linkQueue.rear = newNode; } //出栈 //时间复杂度:O(1) bool deQueue(LinkQueue &linkQueue, ElemType &elem) //参数:队列,元素 { if (linkQueue.front == linkQueue.rear) //队空 { return false; } LinkNode *tempNode = nullptr; //临时结点指针 elem = linkQueue.front->next->data; //获取、保存数据 //出队 tempNode = linkQueue.front->next; linkQueue.front->next = tempNode->next; //易漏边界条件:如果除头结点只剩一个元素,该元素出队后,将队尾结点指针指向队头指针指向的头结点 if (linkQueue.rear == tempNode) { linkQueue.rear = linkQueue.front; } free(tempNode); //释放结点空间 return true; }
总结
不同参考资料中,顺序循环队列和链队列的描述实现各不相同,但基本思想是一致的。作者使用规范的变量命名、提供详细的步骤解析及使用示例,应用C/C++语言将其整合成模板,以帮助理解记忆。
参考资料
- 《2023版数据结构高分笔记》主编:率辉
- 《2023年计算机组成原理考研复习指导》组编:王道论坛
- 《大话数据结构》作者:程杰
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获



