相当于一个多了头尾指针的单链表,头指针指向头结点,尾指针指向最后一个节点
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct
{
LinkNode *front,*rear;
}LinkQueue;
初始化以及判断是否为空(带头结点)
typedef struct LinkNode
{
int data;
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;
}
//判空 如果 q.front==q.rear 则为空 有头结点front一直指向头结点
入队
void Push(LinkQueue &q,int x){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));//首先创建新阶段
s->data=x;s->next=NULL;
q.rear->next=s;//新节点连接到未接点之后
q.rear=s;//尾节点后移
}
出队
bool Pop(LinkQueue &q,int &x)
{
if(q.front==q.rear) return false;//队空
LinkNode *s=q.front->next;
x=s->data;
q.front->next=s->next;
if(q.rear==s)//若只有一个节点,那么删除的是最后一个节点,删除后变空
{
q.rear=q.front;
}
free(s);
return true;
}
双端队列:两端都可以入队和出队