数据结构:链队列的基本操作(C语言实现)
链队列是用链表作为存储结构的队列。队列的特点是先入先出,后入后出。这里采用带头结点的链表结构,并设置一个头指针front和一个尾指针rear始终指向头节点和队尾结点。
#include<stdio.h>
#include<stdlib.h>typedef struct Node /*定义队列结点结构*/
{int data; /*数据域*/struct Node *next; /*指针域*/
}LinkQueueNode;typedef struct
{LinkQueueNode *front; /*队头指针*/LinkQueueNode *rear; /*队尾指针*/
}LinkQueue;void InitQueue(LinkQueue *Q) /*初始化队列函数*/
{Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));if(Q->front!=NULL) /*确保分配头节点成功*/{Q->rear=Q->front;Q->front->next=NULL;printf("Init Queue Successfully!\n");} else{printf("Error!Can not Init Queue!\n");}
}void EnterQueue(LinkQueue *Q,int x) /*进入队列函数*/
{LinkQueueNode *NewNode;NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));if(NewNode==NULL) /*溢出*/{printf("Can not Enter Queue!\n");}else{NewNode->data=x; /*赋值*/NewNode->next=NULL;Q->rear->next=NewNode;Q->rear=NewNode; /*改变队尾指针*/printf("Enter Queue Successfully!\n"); }
}void DeleteQueue(LinkQueue *Q) /*出队列函数*/
{LinkQueueNode *p;if(Q->front==Q->rear) /*判断队列是否为空*/{printf("Queue is Empty!\n");}else{p=Q->front->next;Q->front->next=p->next; /*改变队头指针*/if(Q->rear==p) /*如果队列就一个结点,出队列后队列为空*/{Q->rear=Q->front;}printf("%d\n",p->data);free(p); /*出队列后,删除该结点*/printf("Out of Queue Successfully!\n");}
}int main()
{LinkQueue Q;InitQueue(&Q);EnterQueue(&Q,1);EnterQueue(&Q,2);EnterQueue(&Q,3);DeleteQueue(&Q);DeleteQueue(&Q);DeleteQueue(&Q);DeleteQueue(&Q); /*队列中3个结点,第4次出队列队列应为空*/return 0;
}
运行结果:
小结: 这里只包括了链队列的基础操作:初始化、入队、出队。入队操作采用类似于链表的尾插法。通过改变队尾指针来插入队列。值得注意的是,出队列操作中,需判断队列中是否只有一个元素。如果只有一个元素,则需在出队列后将队尾指针指向头节点。
数据结构:链队列的基本操作(C语言实现)相关推荐
- 顺序队列,链队列的基本操作
顺序队列,链队列的基本操作 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握. 3. 会灵活运用队列结构解决某些实际问 ...
- 队列的基本操作c语言代码大全,数据结构――队列(循环队列)的基本操作(实现链队列逐一取出c语言代码)...
队列 队列是一种重要的线性结构,与栈相同也需要顺序表或者链表作为基础.队列是先进先出(first in first out)FIFO的线性表. 所有数据从队列的一端进入,从另一端离开. 队列中允许插入 ...
- C语言实现数据结构——链队列
定义 前面学习了栈这种数据结构,我们知道他的特点是数据先进后出.与栈相反,队列的特点时数据先进先出.即first in firsr out,简称FIFO. 队列只允许在表的一端进行数据的插入,在另一端 ...
- 链栈的基本操作-C语言
链栈的基本操作 用链表实现一个栈 具体实现 定义一个链栈 //定义一个链栈 typedef struct LNode {int data;struct LNode* next; }LNode, *Li ...
- 链队列的实现 C语言
/* 链队列的实现以及相关操作 作者:S_hmily 日期:2011年9月1日 编译环境:VC++6.0 */ /******************************************* ...
- 队列的基本操作(C语言实现)
本篇博客带来栈的好兄弟--队列. 目录 一. 队列的概念与结构 二. 队列的框架定义 三. 队列的功能实现 3.1 队列的初始化 3.2 队列的销毁 3.3 队列插入数据 3.4 队列删除数据 3.5 ...
- 数据结构 | 链表队列(基本操作及图示)
-------------------------------------------- 基本概念: 和栈相反,队列是一种先进先出(FIFO)的线性表.只允许在一端插入,在另一端删除. 允许插入的叫& ...
- 链队列出入队列c语言程序,链队列简单操作(c语言)
#include #define ERROR 0 struct Node{ int Data; struct Node *Next; }; struct QNode{ struct Node *rea ...
- 【数据结构】队列(链队列、循环队列)的存储结构及基本运算(C语言)
目录 1. 队列基本概念 2. 链队列 2.1 代码+注释 2.2 运行结果 3. 循环队列 3.1 代码+注释 3.2 运行结果 1. 队列基本概念 队列(Queue)是一种限定性线性表,它只允许在 ...
- 数据结构——链式队列解析(C语言版)
摘自:数据结构学习--链式队列解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:07:08 网址:https://blog.csdn.net/chinesekobe/articl ...
最新文章
- JavaScript 小记 之 闭包(Closures)
- 转: ashx中使用Session
- linux sql命令行查询语句不要换行_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?...
- Sublime Text 3常用插件安装(持续更新)
- svn 迁移到git下全过程
- rest_framework 权限功能
- 2022年危险化学品生产单位安全生产管理人员试题模拟考试平台操作
- cannot find -lbz2
- 《Java并发编程实战》读书笔记-第5章 基础构建模块
- 流量分析(wireshark使用)
- Map集合及三层嵌套
- html格式显示图标异常,HTM或HTML图标变成无法显示和识别的解决方法大全
- vs怎么配置c语言codemac,在Mac上使用vs-code快速上手c语言学习(入门文,老鸟退散)...
- Linux运维精华面试题
- 以太网通信(1)UDP —— 数据发送
- 蓝牙BQB认证 - HFP profile配置说明
- 强大的jqGrid!
- 2021年12月1日
- 机器人3D视觉在物流仓储领域的自动化应用
- 珠心算测验 【暴力】
热门文章
- C# 如何插入、删除Excel分页符
- python-selenium 自动化弹幕
- 计算机round是什么函数,round()函数,excel round什么意思
- CVPR2020 Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector论文翻译
- 论文翻译:Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector
- openg离线包_OpenGL离线渲染和缓冲区对象
- UVALive 6437 Power Plant 【最小生成树 + 思维】
- 大数据挖掘是什么,数据挖掘的方法有哪些?
- 网站速度优化4个实用办法
- BZOJ2330【SCOI2011】糖果