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