博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之队列(二)——链队列
阅读量:5122 次
发布时间:2019-06-13

本文共 1330 字,大约阅读时间需要 4 分钟。

链队列采用带头结点的链表,队头指针始终指向头结点队尾指针始终指向最后一个元素

 

当队列为空时:队头指针和队尾指针均指向头结点

链队列不会满!!!

 

 

链队列的定义:

1.定义一种结点结构体:指针域指向下一个结点,数据域存储数据

2.定义链队列结构体:分别存储两个结点指针,队头指针和队尾指针

typedef char DataType;typedef struct Node{	DataType data;	struct Node* next;}LinkQueueNode;typedef struct Queue{	LinkQueueNode *front;	LinkQueueNode *rear;}LinkQueue;

  

 

链队列的初始化

队头指针和队尾指针相等且均为空

bool InitQueue(LinkQueue* Q){	Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));	if(Q->front!=NULL)		{			Q->front->next=NULL;			Q->rear=Q->front;			return true;		}	else	{		return false;	}}

  

入队:

记得队尾的元素的next域为空

bool EnterQueue(LinkQueue* Q,DataType x){	LinkQueueNode *p;	p=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));	if(p!=NULL)		{			p->data=x;			Q->rear->next=p;			p->next=NULL;//注意要赋空 			Q->rear=p;			return true;			}	else	return false;}

  出对

1.删除操作之间要判断是否为空

2.要根据删除操作之后是否为空来决定队尾指针是否等于队头指针

bool DelteQueue(LinkQueue* Q,DataType* x){	LinkQueueNode* p;	//记住:删除操作之前要记得判断是否为空 	if(Q->front==Q->rear)		return false;	else		{			p=Q->front->next;			*x=p->data;			Q->front->next=p->next;			if(p==Q->rear)				Q->rear=Q->front; 				free(p);			return true;		}}

  

可以这样理解:1.判断是否为空

       2.使p=front-》next

       3.赋值给x

       4.使p出对:

Q->front->next=p->next;        

 

       5.判断p出对之后是否为空

          若为空:队尾指针等于队头指针

          若不为空:不做处理

      6.释放p

 

转载于:https://www.cnblogs.com/YTYMblog/p/5379471.html

你可能感兴趣的文章
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
Java高阶回调,回调函数的另一种玩法
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
CGRect知多少
查看>>
Android 开发环境安装配置手册
查看>>
Qt工程文件说明
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
WIN7下搭建CORDOVA环境
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
300 多个免费网站和应用资源
查看>>
Oracle数据库备份还原工具之Expdp/IMPdp
查看>>