线性表--链队列(十二)

写在前面:
大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书。
很感谢能有这样一个平台让我能够在这里分享所学所感。
我喜欢编程,喜欢代码,喜欢去做一个程序员。
努力学习,争取多年后,给亲人更好的生活。
QQ / WX:2506897252 欢迎交流。



1.介绍队列

1.队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
2.队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
3.与线性表一样,队列也有两种存储方式,即顺序表示和链式表示,今天这篇是链式表示法。

2.图示

在这里插入图片描述
用链表表示队列叫做链队列。

3.定义链队列

typedef struct Node
{
 int data;
 struct Node * next;
}Node;
typedef struct
{
 Node * front;
 Node * rear;
}LinkQueue;

4.初始化链队列

在这里插入图片描述

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

5.入队

在这里插入图片描述

int EnterQueue(LinkQueue * Q, int x)
{
 Node * NewNode;
 NewNode = (Node *)malloc(sizeof(Node));
 if (NewNode != NULL)
 {
  NewNode->data = x;
  NewNode->next = NULL;
  Q->rear->next = NewNode;
  Q->rear = NewNode;
  return(true);
 }
 else
 {
  return(false);
 }
}

6.出队

int DeleteQueue(LinkQueue * Q, int * x)
{
 Node * p; //用来存储要出的数据
 if (Q->front == Q->rear)return(false);
 p = Q->front->next;
 Q->front->next = p->next;
 if (Q->rear == p)
 {
  Q->rear = Q->front;
 }
 *x = p->data;
 free(p);
 return(true);
}

若有错误,欢迎指正批评,欢迎讨论。
每文一句:我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使我感奋不已。

发布了35 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Fdog_/article/details/104111269