用只有尾节点指针的循环单链表作为队列存储结构
采用一个不带头节点只有一个尾节点指针 rear 的循环单链表存储队列,设计队列的初始化、进队和出队算法。
(其中每个结点的类型为LinkNode单链表结点类型,对应链队的4要素如下:
- 队空的条件:rear==NULL
- 队满的条件:不考虑
- 元素e的进队操作:新建一个结点存放元素e (由p指向它),将结点p插入作为尾结点,让rear指向这个新的尾结点
- 出队操作:取出队头结点(rear所指结点的后继结点)的data值并将其删除 )
void initQueue(LinkNode * & rear) //初始化算法 { rear=NULL; } void enQueue(LInkNode * & rear, ElemType e) //进队算法 { LinkNode * p; p=(LinkNode * )malloc(sizeof(LinkNode) ); //创建新节点 p->data = e; if ( rear==NULL){ //原链队为空 p->next=p; //改为循环链表 rear=p; //rear 指向新节点 } else{ p->next=rear->next; //原链队不空,将p结点插到rear之后 rear->next=p; //改为循环链表 rear=p; //rear指向新节点 } } bool deQueue(LinkNode * &rear, ElemType &e) { //出队 LinkNode * t; if(rear==NULL) //队空 return false; else if (rear -> next==rear) //原队中只有一个节点 { e=rear->data; free(rear); rear=NULL; //让rear为空链表 } else{ //原队中有两个及以上结点 t=rear->next; //t指向头结点 e=t->data; rear->next=t->next; //删除t结点 free(t); //释放空间 } return true; } bool queueEmpty(LinkNode * rear) //判断队空 { return(rear==NULL); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?