循环队列的9个基本操作及测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<string.h> #include<ctype.h> #include<malloc.h> #include<limits.h> #include<stdio.h> #include<stdlib.h> #include<io.h> #include<math.h> #include<process.h> #define OK 1 #define ERROR 0 #define MAXQSIZE 5 #define TRUE 1 #define FALSE 0 typedef int QElemType; typedef int Status;
typedef struct { QElemType *base; int front; int rear; }SqQueue;
Status InitQueue(SqQueue &Q) { Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType)); if (!Q.base) exit(OVERFLOW); Q.front = Q.rear = 0; return OK; }
int QueueLength(SqQueue Q) { return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; } Status EnQueue(SqQueue &Q, QElemType e) { if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; Q.base[Q.rear] = e;
EnQueue(Q,6); EnQueue(Q,7); printf("检验队列是否为空(1 为空 0 为非空):%d",QueueEmpty(Q)); printf("\n"); printf("队列为:"); QueueTraverse(Q); printf("长度为:"); k=QueueLength(Q); printf("%d",k); printf("\n"); printf("删除前两个数..."); printf("\n"); DeQueue(Q,e); DeQueue(Q,e); printf("队列为:"); QueueTraverse(Q); printf("插入 8,9"); printf("\n"); EnQueue(Q, 8); EnQueue(Q, 9); printf("队列为:"); QueueTraverse(Q); i=GetHead(Q,e); printf("取队头的元素=%d",i); printf("\n"); printf("清空队列..."); printf("\n"); printf("检验是否清空(1 为空 0 为非空):%d",ClearQueue(Q)); printf("\n"); }
Q.rear = (Q.rear + 1) % MAXQSIZE; return OK; }
Status DeQueue(SqQueue &Q,QElemType &e) { if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK; } Status DestroyQueue(SqQueue &Q) { if (Q.base != NULL) { free(Q.base); Q.base = NULL; Q.front = Q.rear = 0; } return OK; }
Status GetHead(SqQueue &Q, QElemType &e) { if (!QueueEmpty(Q)) { e = Q.base[Q.front]; } return e; }
Status QueueTraverse(SqQueue Q) { if (!QueueEmpty(Q)) { int i = Q.front; while (i != Q.rear) { printf("%d", Q.base[i]); i = (i + 1) % MAXQSIZE; } printf("\n"); } return OK; }
void main() { int i,k; QElemType e; SqQueue Q; InitQueue(Q); printf("新建队列..."); printf("\n"); printf("检验队列是否为空(1 为空 0 为非空):%d",QueueEmpty(Q)); printf("\n"); printf("队列为:"); QueueTraverse(Q); printf("\n"); printf("插入数字 4,5,6,7"); printf("\n"); EnQueue(Q,4); EnQueue(Q,5);
Hale Waihona Puke Baidu
Status ClearQueue(SqQueue &Q) { Q.front = Q.rear = 0; return OK; }
Status QueueEmpty(SqQueue Q) { if (Q.front==Q.rear) { return TRUE; } else { return FALSE; } }
typedef struct { QElemType *base; int front; int rear; }SqQueue;
Status InitQueue(SqQueue &Q) { Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType)); if (!Q.base) exit(OVERFLOW); Q.front = Q.rear = 0; return OK; }
int QueueLength(SqQueue Q) { return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; } Status EnQueue(SqQueue &Q, QElemType e) { if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; Q.base[Q.rear] = e;
EnQueue(Q,6); EnQueue(Q,7); printf("检验队列是否为空(1 为空 0 为非空):%d",QueueEmpty(Q)); printf("\n"); printf("队列为:"); QueueTraverse(Q); printf("长度为:"); k=QueueLength(Q); printf("%d",k); printf("\n"); printf("删除前两个数..."); printf("\n"); DeQueue(Q,e); DeQueue(Q,e); printf("队列为:"); QueueTraverse(Q); printf("插入 8,9"); printf("\n"); EnQueue(Q, 8); EnQueue(Q, 9); printf("队列为:"); QueueTraverse(Q); i=GetHead(Q,e); printf("取队头的元素=%d",i); printf("\n"); printf("清空队列..."); printf("\n"); printf("检验是否清空(1 为空 0 为非空):%d",ClearQueue(Q)); printf("\n"); }
Q.rear = (Q.rear + 1) % MAXQSIZE; return OK; }
Status DeQueue(SqQueue &Q,QElemType &e) { if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK; } Status DestroyQueue(SqQueue &Q) { if (Q.base != NULL) { free(Q.base); Q.base = NULL; Q.front = Q.rear = 0; } return OK; }
Status GetHead(SqQueue &Q, QElemType &e) { if (!QueueEmpty(Q)) { e = Q.base[Q.front]; } return e; }
Status QueueTraverse(SqQueue Q) { if (!QueueEmpty(Q)) { int i = Q.front; while (i != Q.rear) { printf("%d", Q.base[i]); i = (i + 1) % MAXQSIZE; } printf("\n"); } return OK; }
void main() { int i,k; QElemType e; SqQueue Q; InitQueue(Q); printf("新建队列..."); printf("\n"); printf("检验队列是否为空(1 为空 0 为非空):%d",QueueEmpty(Q)); printf("\n"); printf("队列为:"); QueueTraverse(Q); printf("\n"); printf("插入数字 4,5,6,7"); printf("\n"); EnQueue(Q,4); EnQueue(Q,5);
Hale Waihona Puke Baidu
Status ClearQueue(SqQueue &Q) { Q.front = Q.rear = 0; return OK; }
Status QueueEmpty(SqQueue Q) { if (Q.front==Q.rear) { return TRUE; } else { return FALSE; } }