- 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);
- }