链队列及其操作
问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。
lqueue->rear要不断的后移***因此,每次入队的时候要找到lqueue->rear,因此每次入队是要后移lqueue->rear。^^
代码:
#include <iostream> #include <cstdlib> using namespace std; typedef struct LinkQueue { int data; struct LinkQueue *front; struct LinkQueue *rear; }*LQueue; void initLQueue(LQueue &lqueue) { lqueue=(LQueue) malloc ( sizeof ( struct LinkQueue)); if (!lqueue) { cout<< "allocate fail" <<endl; exit (-1); } else { lqueue->front=lqueue->rear=NULL; } } void enQueue(LQueue lqueue, int elem) //入队 { LQueue node,temp; node=(LQueue) malloc ( sizeof ( struct LinkQueue)); if (!node) { cout<< "allocate fail" <<endl; exit (-1); } else { node->data=elem; node->front=node->rear=NULL; if (lqueue->front==NULL) { temp=lqueue; temp->front=node; temp->rear=node; } else { temp=lqueue->rear; temp->rear=node; lqueue->rear=node; } } } int deQueue(LQueue lqueue) { LQueue p; int elem; if (lqueue->front!=NULL) { if (lqueue->front->rear!=NULL) { p=lqueue->front; lqueue->front=p->rear; elem=p->data; free (p); } else { p=lqueue->front; elem=p->data; lqueue->front=lqueue->rear=NULL; free (p); } return elem; } return 0; } int GetHead(LQueue lqueue) { int elem; if (lqueue->front!=NULL) { elem=lqueue->front->data; return elem; } return 0; } int main() { LQueue lqueue; int arr[]={9,3,21,11,70,13,8,2,6}; initLQueue(lqueue); for ( int i=0;i<9;i++) { enQueue(lqueue,arr[i]); } cout<< "队头元素是 " <<GetHead(lqueue)<<endl; while (lqueue->front!=NULL) { cout<<deQueue(lqueue)<< " | " ; } cout<<endl; return 0; } |
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述