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

2020-10-28 09:52:17 浏览数 (1)

1.介绍队列

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

2.图示

用链表表示队列叫做链队列。

3.定义链队列

代码语言:javascript复制
typedef struct Node
{
 int data;
 struct Node * next;
}Node;
typedef struct
{
 Node * front;
 Node * rear;
}LinkQueue;

4.初始化链队列

代码语言:javascript复制
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.入队

代码语言:javascript复制
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.出队

代码语言:javascript复制
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);
}

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

0 人点赞