1.创建队列
2.判空
3.判断环形队列是否已满
4.入队
5.出队
6.取队列的头元素
7.销毁
顺序队列数据结构定义
typedef int DataType;
struct seqQueue
{
int MAXNUM;//最大元素个数
int front,rear;//队首,队尾
DataType *element;//用于存放数据元素的连续空间的起始地址
};
typedef struct seqQueue *PseqQueue;
1.创建队列
PseqQueue createNullQueue_seq(int m)
{//m存放的最大元素个数,若m=0,则返回NULL
if(m==0){
return NULL;
}
PseqQueue p = (PseqQueue)malloc(sizeof(struct seqQueue));
p->element = (DataType *)malloc(sizeof(DataType)*m);
p->MAXNUM = m;
p->front = 0;
p->rear = 0;
return p;
}
2. 判空
int isNullQueue_seq(PseqQueue Q)
{
//队列为空,返回1,否则返回0,若队列不存在,则返回-1
if(Q == NULL){
return -1;
}
return (Q->front == Q->rear)?1:0;
}
3.判断环形队列是否已满
int isFullQueue_seq(PseqQueue Q)
{
//已满,返回1,否则返回0
return ((Q->rear+1)%Q->MAXNUM == Q->front)?1:0;
}
4.入队
int enQueue_seq(PseqQueue Q ,DataType x)
{//插入不成功,返回0;插入成功返回1
if((Q->rear+1)%Q->MAXNUM == Q->front){ //判断是否满
return 0;
}
Q->element[Q->rear] = x;
Q->rear = (Q->rear+1)%Q->MAXNUM;
return 1;
}
5.出队
DataType delQueue_seq(PseqQueue Q)
{//出队并返回删除元素,若队列为空,则返回-1
int a;
if(Q==NULL || Q->front==Q->rear){
return -1;
}else{
a = Q->element[Q->front];
Q->front=(Q->front+1)%Q->MAXNUM;
return a;
}
}
6.取队列的头元素
DataType front_seq(PseqQueue Q)
{// 若队列为空,返回-1
return (Q->front == Q->rear)?-1:Q->element[Q->front];
}
7.销毁
int destroyQueue_seq(PseqQueue Q)
{
//返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
if(Q==NULL || Q->front==Q->rear){
return 0;
}
int a;//现有数据元素的个数
a = (Q->rear-Q->front+Q->MAXNUM)%Q->MAXNUM;
Q->MAXNUM = 0;
Q->front = 0;
Q->rear = 0;
free(Q->element);
free(Q);
return a;
}