博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
另类循环队列
阅读量:6319 次
发布时间:2019-06-22

本文共 1870 字,大约阅读时间需要 6 分钟。

裁判测试程序样例:

#include 
#include
#define ERROR -1typedef int ElementType;typedef enum { addq, delq, end } Operation;typedef enum { false, true } bool;typedef int Position;typedef struct QNode *PtrToQNode;struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front; /* 队列的头、尾指针 */ int Count; /* 队列中元素个数 */ int MaxSize; /* 队列最大容量 */};typedef PtrToQNode Queue; Queue CreateQueue( int MaxSize ){ Queue Q = (Queue)malloc(sizeof(struct QNode)); Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType)); Q->Front = 0; Q->Count = 0; Q->MaxSize = MaxSize; return Q;}bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );Operation GetOp(); /* 裁判实现,细节不表 */int main(){ ElementType X; Queue Q; int N, done = 0; scanf("%d", &N); Q = CreateQueue(N); while ( !done ) { switch( GetOp() ) { case addq: scanf("%d", &X); AddQ(Q, X); break; case delq: X = DeleteQ(Q); if ( X!=ERROR ) printf("%d is out\n", X); break; case end: while (Q->Count) printf("%d ", DeleteQ(Q)); done = 1; break; } } return 0;}/* 你的代码将被嵌在这里 */

 

解题思路: Q->Front指向首元素位置,Q->Count作为偏移量

1 bool AddQ( Queue Q, ElementType X ) 2 { 3     if(Q->Count == Q->MaxSize) 4     { 5         printf("Queue Full\n"); 6         return false; 7     } 8     Q->Data[(Q->Front + Q->Count) % Q->MaxSize] = X; 9     Q->Count++;10     return true;11 }12 ElementType DeleteQ( Queue Q )13 {14     if(Q->Count == 0)15     {16         printf("Queue Empty\n");17         return ERROR;18     }19     ElementType tmp = Q->Data[Q->Front];20     Q->Front = (Q->Front + 1) % Q->MaxSize;21     Q->Count--; 22     return tmp;23 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/9823239.html

你可能感兴趣的文章
计算机网络与Internet应用
查看>>
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
在市场营销中使用敏捷方法:过程、团队与成功案例
查看>>
新书问答:Agile Management
查看>>
react入门
查看>>
VUE高仿饿了么app
查看>>
针对Kubernetes软件栈有状态服务设计的思考
查看>>
第八章 进程间通信
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
订单的子单表格设置颜色
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
iframe 在ie下面总是弹出新窗口解决方法
查看>>
android编译系统makefile(Android.mk)写法
查看>>
MD5源代码C++
查看>>
Eclipse 添加 Ibator
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
Python编程语言
查看>>
十四、转到 linux
查看>>