当前位置: 首页 > news >正文

循环队列(不扩容)

#include<bits/stdc++.h>
#define MAXSIZE 5
typedef int elemtype; 
typedef struct{int maxsize,front,rear;//实际最大容量只有maxsize-1,留一个不用 elemtype *base;
}SqQueue;
bool InitQueue(SqQueue &Q,int size=MAXSIZE);
int QueueLength(SqQueue Q);
bool DestroyQueue(SqQueue &Q);
bool QueueEmpty( SqQueue Q ); 
bool QueueFull( SqQueue Q );
bool EnQueue(SqQueue &Q,elemtype e);
bool DeQueue ( SqQueue &Q ,  elemtype  &e );int main(){SqQueue Q;// 测试初始化printf("=== 初始化队列(容量%d)===\n", MAXSIZE-1);InitQueue(Q, MAXSIZE);printf("初始化成功!队列空: %s\n", QueueEmpty(Q) ? "是" : "否");// 测试入队printf("\n=== 测试入队操作 ===\n");for(int i = 1; i <= MAXSIZE; i++) {if(EnQueue(Q, i * 10)) {printf("入队成功: %d, 队列长度: %d\n", i * 10, QueueLength(Q));} else {printf("入队失败: %d (队列已满)\n", i * 10);}}// 测试队列满printf("\n队列满: %s\n", QueueFull(Q) ? "是" : "否");// 测试出队printf("\n=== 测试出队操作 ===\n");elemtype value;for(int i = 0; i < 2; i++) {if(DeQueue(Q, value)) {printf("出队成功: %d, 队列长度: %d\n", value, QueueLength(Q));} else {printf("出队失败 (队列已空)\n");}}// 再次入队测试循环特性printf("\n=== 再次入队测试循环特性 ===\n");for(int i = 1; i <= 3; i++) {if(EnQueue(Q, i * 100)) {printf("入队成功: %d, 队列长度: %d\n", i * 100, QueueLength(Q));} else {printf("入队失败: %d (队列已满)\n", i * 100);}}// 全部出队printf("\n=== 全部出队 ===\n");while(!QueueEmpty(Q)) {if(DeQueue(Q, value)) {printf("出队: %d, 剩余长度: %d\n", value, QueueLength(Q));}}printf("最终队列空: %s\n", QueueEmpty(Q) ? "是" : "否");// 销毁队列DestroyQueue(Q);printf("\n队列已销毁\n");return 0;
} 
bool DeQueue ( SqQueue &Q ,  elemtype  &e ){if(QueueEmpty(Q))return 0;e=Q.base[Q.front];Q.front=(Q.front+1)%Q.maxsize;return 1;
}
bool EnQueue(SqQueue &Q,elemtype e){if(QueueFull(Q))return 0;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%Q.maxsize;return 1;
}
bool QueueFull( SqQueue Q ){if((Q.rear+1)%Q.maxsize==Q.front)return 1;else return 0;
}
bool QueueEmpty( SqQueue Q ){if(Q.front==Q.rear)return 1;else return 0;
}
bool DestroyQueue(SqQueue &Q){free(Q.base);Q.base=NULL;return 1;	
}
bool InitQueue(SqQueue &Q,int maxsize){Q.base=(elemtype*)malloc(sizeof(elemtype)*maxsize);if(!Q.base)exit(1);Q.maxsize=maxsize;Q.front=Q.rear=0;return 1;
}
int QueueLength(SqQueue Q){return (Q.rear-Q.front+Q.maxsize)%Q.maxsize;//r points to the next avaiable position!!
}

扩容比较麻烦,这里不实现,同时实际最大大小只有maxsize-1,用于区分和栈为空的情况

http://www.dtcms.com/a/559407.html

相关文章:

  • 大连网站建设公司哪家好网站和网络有什么区别
  • plc学习路线
  • 网站页脚内容工具型网站
  • 网站制作费用多少wordpress mu 搜索
  • 建设网站的五个步骤个人网站主页建设教程
  • 行业平台网站建设一台服务器一个固定ip怎样做两个网站
  • 温州网站设计工作室优化推广网站淄博
  • 电子商务网站后台seo引擎搜索网站关键词
  • 酒店要做关于网站ppt怎么做保定网站建
  • 网站开发 外包空心wordpress识别手机跳转网站
  • wordpress可以仿任何站seo的工作流程
  • 微机课做网站广告案例网站
  • 还有哪些行业可以做垂直网站wordpress 仿百度百家
  • php7跨设备网站开发pdf网页首页设计图片
  • 网站设计人员就业要求青岛网站制作价格
  • 网站建设公司客户分析成都专业网站推广公司
  • 建设人力资源网站目标企业站seo哪家好
  • 网站设计大概多少钱如何申请网站空间
  • 兼职网站开发需求网上做造价网站
  • 手机网站建设怎么样建完网站怎样维护
  • 个人网站可以做地方女装网站建设规划书
  • 免费域名如何建站搜索引擎优化自然排名的缺点
  • 高端的网站建设wordpress调用菜单
  • wordpress登录地址修改密码搜狗整站优化
  • 做微商哪个网站有客源黄埔做网站
  • 域名解析网站登录seo技术软件
  • 深圳市深圳市住房和建设局网站首页seo网络推广公司
  • xunsearch做搜索网站江西省网站建设公司
  • 原识:快述Transformer架构
  • 不是搜索网站的是北京清控人居建设集团网站