队列的链式存储
typedef struct LinkNode{ //链式队列结点
Elemtype date;
struct LinkNode *next
}LinkNode;
typedef struct{ //链式队列
LinkNode *front,*rear; //队头队尾指针
}LinkQueue; //队列链式储类型
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear =(LinkNode *)malloc(sizeof(LinkNode));
Q.front->next = NULL;//初始化队列(带头节点)
}
void InitQueue(LinkQueue &Q)
{
Q.front = NULL;//初始化队列(不带头节点)
Q.rear = NULL;
}
void testLinkQueue()
{
LinkQueue Q; //声明一个队列
InitQueue (Q); //初始化队列
}
判断队列是否为空(带头节点)
bool IsEmpty(LinkQueue Q)
{
if(Q.front == Q.rear)
return true;
else
return false;
}
判断队列是否为空(不带头节点)
bool Isempty(LinkQueue Q)
{
if(Q.front == NULL)
return true ;
else
return false;
}
入队(带头节点)
void EnQueue(LinkQueue &Q,Elemtype x)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->date = x;
Q.rear->next = s;
Q.rear = s;
}
入队(不带头节点)
void EnQueue(LinkQueue &Q,Elemtype x)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
if(Q.front == NULL) //不带头节点时 第一个元素需要特别处理
{ Q.front = s;
Q.rear = s;
}
else
{
Q.rear -> s;
Q.rear = s;
}
}
出队(带头节点)
bool DeQueue(LinkQueue &Q,Elentype &x)
{
if(Q.front == Q.rear) //空队
return false;
LinkNode *p = Q.front->next;
x = p->date;
Q.front->next = p->next;
if(Q.rear == p) //如果是最后一个结点出队 将rear指针指向头节点
Q.rear = Q.front;
free(p);
return true;
}
出队(不带头节点)
bool DeQueue(LinkQueue &Q,Elemtype &x)
{
if(Q.front = NUUL)
return false;
LinkNode *p = Q.front;
x = p->date;
Q.front = Q.front->next;
if(Q.rear == p) //最后一个结点出队要单独考虑
{
Q.rear = NULL;
Q.front =NULL;}
free(p);
return true;
}