结构体
typedef struct {
int data[maxsize];
int front, rear;//front为对头指针,rear为队尾指针
int tag;//标志位
int size;//记录数据元素
}sqquene;
初始化队列
int initquene(sqquene* q)//初始化队列
{
q->rear = q->front = 0;
}
因为1.可以牺牲一个单元来区分队空和队满
队满条件为:(q.rear + 1) % maxsize == q.front
对空条件为 : q.front == q.rear
队列中的元素个数为(q.rear - q.front + maxsize) % maxsize
2.可以设一个记录元素个数的数据成员
对空条件为:q.front == q.rear && q.size == 0;
队满条件为:q.front == q.rear && q.size == maxsize;
3.可以设一个标志位
每次删除成功,令tag=0;插入成功时,令tag=1;
对空条件为q.front == q.rear && tag == 0;
队满条件为q.front == q.rear && tag == 1;判空有很多种方法
int queneempty(sqquene* q)//队列判空
{
if (q->rear == q->front)
return true;
else return false;
}
进队操作
int enquene(sqquene* q, int x)//进队操作
{
if ((q->rear+1)%maxsize==q->front)
return false;
q->data[q->rear] = x;
q->rear=(q->rear+1)%maxsize;
return true;
}
出队操作
int dequene(sqquene* q, int* x)//出队操作
{
if (q->front==q->rear)
return false;
*x = q->data[q->front];
q->front = (q->front + 1) % maxsize;
return true;
}
完整测试代码
#define maxsize 10
#define true 1
#define false 0
typedef struct {
int data[maxsize];
int front, rear;//front为对头指针,rear为队尾指针
int tag;//标志位
int size;//记录数据元素
}sqquene;
int initquene(sqquene* q)//初始化队列
{
q->rear = q->front = 0;
}
int queneempty(sqquene* q)//队列判空
{
if (q->rear == q->front)
return true;
else return false;
}
int enquene(sqquene* q, int x)//进队操作
{
if ((q->rear+1)%maxsize==q->front)
return false;
q->data[q->rear] = x;
q->rear=(q->rear+1)%maxsize;
return true;
}
int dequene(sqquene* q, int* x)//出队操作
{
if (q->front==q->rear)
return false;
*x = q->data[q->front];
q->front = (q->front + 1) % maxsize;
return true;
}
#include
int main()
{
sqquene q;
initquene(&q);
if (!queneempty(&q)) //队列判空
printf("队列不为空\n");
else
printf("队列为空\n");
int x = 0;
printf("要进队的元素为:");
scanf("%d", &x);
if (enquene(&q, x)) //进队操作
printf("进队元素为%d\n", x);
else
printf("队列满,不能进队%d\n", x);
if (dequene(&q, &x)) //出队操作
printf("出队元素为%d\n", x);
else
printf("队列为空,不能出队\n");
printf("%d\n", x);
}