一、什么的队列
队列是一种特殊的线性表,是一种只允许在表的一端进行插入操作,而在另一端进行删除操作的线性表。允许进行删除的一端叫队头,允许进行插入的一端叫做队尾。
二、存储结构
typedef int DataType;
struct SeqQueue
{
int MAXNUM;
int front,rear;
DataType *q;
};
typedef struct seqQueue *PseqQueue;
三、c语言实现顺序队列
创建空的环形队列
创建一个空的顺序队列,能存放的最大元素个数为 m
若m=0,则返回NULL
PseqQueue createNullQueue_seq(int m)
{
PseqQueue paqu = (PseqQueue)malloc(sizeof(struct seqQueue));
if(paqu != NULL)
{
if(m != 0)
paqu->q = (DataType*)malloc(sizeof(DataType)*m);
else
return NULL;
if(paqu->q)
{
paqu->MAXNUM = m;
paqu->front = 0;
paqu->rear = 0;
return paqu;
}
}
return NULL;
}
队列为空判断
int isNullQueue_seq(PseqQueue Q)
{
if(Q == NULL)return -1;
if(Q->front == Q->rear)return 1;
else return 0;
}
队列为满判断
判断环形队列是否已满,若已满,返回值为1,否则返回值为0
int isFullQueue_seq(PseqQueue Q)
{
return(Q->rear == Q->MAXNUM-1);
}
入队
在环形队列中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
int enQueue_Seq(Psequeue Q,DataType x)
{
if((Q->rear+1)%Q->MAXNUM == Q->front)return 0;
else
{
Q->q[Q->rear] = x;
Q->rear = (Q->rear+1)%Q->MAXNUM;
return 1;
}
}
出队
出队并返回删除元素,若队列为空,则返回-1
DataType delQueue_seq(PseqQueue Q)
{
if(Q->front == Q->rear)return -1;
else
{
int p = Q->q[Q->front];
Q->front = (Q->front+1)%Q->MAXNUM;
return p;
}
}
取队首元素
取队首元素返回,若队列为空,则返回-1
DataType front_seq(PseqQueue Q)
{
if(Q->front == Q->rear)return -1;
else return (Q->q[Q->front]);
}