赞
踩
1.要会判断队满:
- if((Q.rear+1)%MAXQSIZZE == Q.front){//判断队满
- return ERROR;
- }
2.判断队空
if (Q.front == Q.rear) return ERROR;//判断队空
3.获取队长
j = (Q.rear - Q.front + MAXQSIZZE) % MAXQSIZZE;
4.队头后移和队尾后移要注意,移动要怎么写?(重要!)
Q.front = (Q.front + 1) % MAXQSIZZE;//让队头元素后移
Q.rear = (Q.rear + 1) % MAXQSIZZE;//取余是为了在队尾时加一可以回到头,形成循环
下面上代码:
- #include<stdio.h>
- #include<stdlib.h>
- #define MAXQSIZZE 100
- #define OK 1
- #define ERROR 0
- #define OVERFLOW -2
- int i, n, e, j, x, num;
- //队列看成循环队列,通过少放一个元素来解决假上溢
- typedef struct {
- int* base;//指向数组名的指针,代表数组第一个元素的地址
- int front;//队头元素的下标
- int rear;//队尾元素的下标
- }SqQueue;
- //1.循环队列的初始化
- int InitSqQueue_Q(SqQueue &Q) {
- Q.base = (int*)malloc(MAXQSIZZE * sizeof(SqQueue));//分配数组的空间
- if (!Q.base)exit(OVERFLOW);
- Q.front = Q.rear = 0;//让队列为空
- return 0;
- }
- //2.循环队列入队(元素e入队)
- int EnQueue_Q(SqQueue &Q,int e) {
- if((Q.rear+1)%MAXQSIZZE == Q.front){//判断队满
- return ERROR;
- }
- Q.base[Q.rear] = e;//把元素e插入到队列里面的数组下标为Q.rear的位置,也就是队尾
- Q.rear = (Q.rear + 1) % MAXQSIZZE;//取余是为了在队尾时加一可以回到头,形成循环
- return OK;
- }
- //2.循环队列出队(出队元素用e返回)
- int DeQueue_Q(SqQueue& Q,int &e) {
- if (Q.front == Q.rear) return ERROR;//判断队空
- e = Q.base[Q.front];//保存队头元素
- Q.front = (Q.front + 1) % MAXQSIZZE;//让队头元素后移
- return OK;
- }
- //3.获取队长
- int SqQueueLength_Q(SqQueue& Q,int &j) {
- j = (Q.rear - Q.front + MAXQSIZZE) % MAXQSIZZE;
- return j;
- }
- //4.取队头元素
- int GetHead_Q(SqQueue &Q,int &e) {
- if (Q.front == Q.rear) {
- printf("队空");
- return ERROR;
- }
- e = Q.base[Q.front];
- return OK;
- }
- int main() {
- SqQueue Q;
- InitSqQueue_Q(Q);
- printf("请输入初始队列元素个数:");
- scanf("%d", &n);
- printf("输入队列元素:");
- for (i = 0; i < n; i++) {
- scanf("%d", &e);
- EnQueue_Q(Q, e);
- printf("%d", e);
- }
- GetHead_Q(Q, e);
- printf("\n队头元素为:%d",e);
- printf("\n请输入出队的个数:");
- scanf("%d", &x);
- printf("出队的元素为:");
- for (i = 0; i < x; i++) {
- DeQueue_Q(Q, e);
- printf("%d", e);
- }
- SqQueueLength_Q(Q,j);
- printf("\n出队后的元素个数剩下:%d", j);
- printf("\n出队后的循环队列为:");
- for (i = 0; i < j; i++) {
- printf("%d", Q.base[Q.front]);
- Q.front = (Q.front + 1) % MAXQSIZZE;
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。