队列代码
在已知总长度的情况下,用循环队列(顺序存储);在总长度未知的情况下,用链队列(链式存储)
A 链式存储
#include<stdio.h>
#include<malloc.h>
typedef structstudent
{
int data;
structstudent*next;
}node;
typedef structlinkqueue
{
node*first;
node*rear;
}queue;
queue*insert(queue*HQ,intx)
{
node*s;
s = (node*)malloc(sizeof(node));
s->data = x;
s->next = NULL;
if (HQ->rear== NULL)
{
HQ->first= s;
HQ->rear= s;
}
else
{
HQ->rear->next= s;
HQ->rear= s;
}
returnHQ;
}
queue*del(queue*HQ)
{
node*p; intx;
if(HQ->first==NULL)
printf("\nyichu");
}
else
{
x=HQ->first->data;
p=HQ->first;
if(HQ->first==HQ->rear)
{
HQ->first=NULL;
HQ->rear=NULL;
}
else
{
HQ->first=HQ->first->next;
free(p);
}
return HQ;
}
B 循环队列
注: front指向头元素,rear指向尾元素的下一个元素
#include<iostream>
#include<stdio.h>
#include<malloc.h>
#defineMAXSIZE100
#defineERROR0
typedefstruct
{
int*base;
intfront;
intrear;
}cycleQueue;
cycleQueue*InitQueue(cycleQueue*q)
{
q->base= (int*)malloc(MAXSIZE*sizeof(int));
if(!q->base) exit(0);
q->front= q->rear = 0;
returnq;
}
cycleQueue*InsertQueue(cycleQueue*q ,intx)
{
if ((q->rear + 1) % MAXSIZE == q->front)
return ERROR;//队满操作
q->base[q->rear]= x;
q->rear= (q->rear + 1) % MAXSIZE;
returnq;
}
cycleQueue*DelQueue(cycleQueue*q,int*e)
{
if(q->front== q->rear)
return ERROR;//队列为空
*e= q->base[q->front];
q->front= (q->front + 1) % MAXSIZE;
returnq;
}