循环队列操作
来源:互联网 发布:淘宝互动平台在哪看 编辑:程序博客网 时间:2024/05/01 00:26
/*
circle_queue.cpp
循环队列
1.建栈 2.遍历。3.压栈 4.出栈 5.清栈
by adengou@foxmail.com
2012.07.09
vs2010 和dev++ 5.0编译通过
*/
//#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
//队列结构
typedef struct Queue
{
int *pBase;
int front;
int rear;
int initLen;//初始化队列长度
}QUEUE,*PQUEUE;
//队列初始化
void initQueue(PQUEUE,int);
//遍历队列
void traversalQueue(PQUEUE);
//入队
bool enterQueue(PQUEUE,int);
//出队
bool outQueue(PQUEUE,int*);
//队列满
bool isFullQueue(PQUEUE);
//队列空
bool isEmptyQueue(PQUEUE pQueue);
//存在队列
bool existQueue(PQUEUE);
int main(void)
{
int queueLen=0;
int enterQueueVal=0;
int outQueueVal=0;
QUEUE mQueue;
mQueue.initLen=0;
printf(" 循环队列操作 \n");
printf("**********************************************\n");
printf("****** 菜单选项 ******\n");
printf("****** ******\n");
printf("****** 1.队列初始化 2.遍历队列 ******\n");
printf("****** 3.入队 4.出队 ******\n");
printf("****** 0.退出 ******\n");
printf("****** ******\n");
printf("**********************************************\n");
//栈初始化
//initQueue(&mQueue,queueLen);
while(1)
{
switch(getchar())
{
case '1':
if(existQueue(&mQueue))
{
printf("队列已存在,你确定建立新队列吗?(Y/N):");
if(getchar()=='Y' ||getchar()=='y' )
{
printf("请输入队列长度:");
scanf("%d",&queueLen);
initQueue(&mQueue,queueLen);
break;
}
if(getchar()=='N' ||getchar()=='n' )
{
break;
}
}
else
{
printf("请输入队列长度:");
scanf("%d",&queueLen);
initQueue(&mQueue,queueLen);
}
break;
case '2':
traversalQueue(&mQueue);
break;
case '3':
if(!existQueue(&mQueue)||isFullQueue(&mQueue))
{
break;
}
else
{
printf("请输入入队列值(以'q'结束):");
while(1)
{
scanf("%d",&enterQueueVal);
if(getchar()=='q')break;
enterQueue(&mQueue,enterQueueVal);
}
printf("入队列成功!\n");
break;
}
case '4':
if(outQueue(&mQueue,&outQueueVal))
{
printf("出队列成功,值为:%d\n",outQueueVal);
}else{
printf("出队列不成功!\n");
}
break;
case '0':
exit(0);
break;
default:
break;
}
}
system("pause");
return 0;
}
void initQueue(PQUEUE pQueue,int queueLen)
{
pQueue->pBase=(int *)malloc(sizeof(int)*queueLen);
if(pQueue->pBase==NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
pQueue->front=0;
pQueue->rear=0;
pQueue->initLen=queueLen+1;
printf("队列初始化成功\n");
return;
}
bool enterQueue(PQUEUE pQueue,int val)
{
if(pQueue->initLen==0||((pQueue->rear+1)%pQueue->initLen)==pQueue->front)
{
return false;
}
else
{
pQueue->pBase[pQueue->rear]=val;
pQueue->rear=(pQueue->rear+1)%pQueue->initLen;
return true;
}
}
bool outQueue(PQUEUE pQueue,int* val )
{
if(!existQueue(pQueue)||isEmptyQueue(pQueue))
{
return false;
}
else
{
*val=pQueue->pBase[pQueue->front];
pQueue->front=(pQueue->front+1)%pQueue->initLen;
return true;
}
}
bool isFullQueue(PQUEUE pQueue)
{
if((pQueue->rear+1)%pQueue->initLen==pQueue->front)
{
printf("队列满!\n");
return true;
}
else
{
return false;
}
}
bool existQueue(PQUEUE pQueue)
{
if(pQueue->initLen==0)
{
printf("队列未初始化!\n");
return false;
}
else
{
return true;
}
}
void traversalQueue(PQUEUE pQueue)
{
if(!existQueue(pQueue)||isEmptyQueue(pQueue))
{
return;
}
else
{
printf("当前队列是:");
int i=pQueue->front;
while(i!=pQueue->rear)
{
printf("%d ",pQueue->pBase[i]);
i=(i+1)%pQueue->initLen;
}
printf("\n");
return;
}
}
bool isEmptyQueue(PQUEUE pQueue)
{
if(pQueue->rear==pQueue->front&pQueue->initLen!=0)
{
printf("空队列!\n");
return true;
}else{
return false;
}
}
circle_queue.cpp
循环队列
1.建栈 2.遍历。3.压栈 4.出栈 5.清栈
by adengou@foxmail.com
2012.07.09
vs2010 和dev++ 5.0编译通过
*/
//#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
//队列结构
typedef struct Queue
{
int *pBase;
int front;
int rear;
int initLen;//初始化队列长度
}QUEUE,*PQUEUE;
//队列初始化
void initQueue(PQUEUE,int);
//遍历队列
void traversalQueue(PQUEUE);
//入队
bool enterQueue(PQUEUE,int);
//出队
bool outQueue(PQUEUE,int*);
//队列满
bool isFullQueue(PQUEUE);
//队列空
bool isEmptyQueue(PQUEUE pQueue);
//存在队列
bool existQueue(PQUEUE);
int main(void)
{
int queueLen=0;
int enterQueueVal=0;
int outQueueVal=0;
QUEUE mQueue;
mQueue.initLen=0;
printf(" 循环队列操作 \n");
printf("**********************************************\n");
printf("****** 菜单选项 ******\n");
printf("****** ******\n");
printf("****** 1.队列初始化 2.遍历队列 ******\n");
printf("****** 3.入队 4.出队 ******\n");
printf("****** 0.退出 ******\n");
printf("****** ******\n");
printf("**********************************************\n");
//栈初始化
//initQueue(&mQueue,queueLen);
while(1)
{
switch(getchar())
{
case '1':
if(existQueue(&mQueue))
{
printf("队列已存在,你确定建立新队列吗?(Y/N):");
if(getchar()=='Y' ||getchar()=='y' )
{
printf("请输入队列长度:");
scanf("%d",&queueLen);
initQueue(&mQueue,queueLen);
break;
}
if(getchar()=='N' ||getchar()=='n' )
{
break;
}
}
else
{
printf("请输入队列长度:");
scanf("%d",&queueLen);
initQueue(&mQueue,queueLen);
}
break;
case '2':
traversalQueue(&mQueue);
break;
case '3':
if(!existQueue(&mQueue)||isFullQueue(&mQueue))
{
break;
}
else
{
printf("请输入入队列值(以'q'结束):");
while(1)
{
scanf("%d",&enterQueueVal);
if(getchar()=='q')break;
enterQueue(&mQueue,enterQueueVal);
}
printf("入队列成功!\n");
break;
}
case '4':
if(outQueue(&mQueue,&outQueueVal))
{
printf("出队列成功,值为:%d\n",outQueueVal);
}else{
printf("出队列不成功!\n");
}
break;
case '0':
exit(0);
break;
default:
break;
}
}
system("pause");
return 0;
}
void initQueue(PQUEUE pQueue,int queueLen)
{
pQueue->pBase=(int *)malloc(sizeof(int)*queueLen);
if(pQueue->pBase==NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
pQueue->front=0;
pQueue->rear=0;
pQueue->initLen=queueLen+1;
printf("队列初始化成功\n");
return;
}
bool enterQueue(PQUEUE pQueue,int val)
{
if(pQueue->initLen==0||((pQueue->rear+1)%pQueue->initLen)==pQueue->front)
{
return false;
}
else
{
pQueue->pBase[pQueue->rear]=val;
pQueue->rear=(pQueue->rear+1)%pQueue->initLen;
return true;
}
}
bool outQueue(PQUEUE pQueue,int* val )
{
if(!existQueue(pQueue)||isEmptyQueue(pQueue))
{
return false;
}
else
{
*val=pQueue->pBase[pQueue->front];
pQueue->front=(pQueue->front+1)%pQueue->initLen;
return true;
}
}
bool isFullQueue(PQUEUE pQueue)
{
if((pQueue->rear+1)%pQueue->initLen==pQueue->front)
{
printf("队列满!\n");
return true;
}
else
{
return false;
}
}
bool existQueue(PQUEUE pQueue)
{
if(pQueue->initLen==0)
{
printf("队列未初始化!\n");
return false;
}
else
{
return true;
}
}
void traversalQueue(PQUEUE pQueue)
{
if(!existQueue(pQueue)||isEmptyQueue(pQueue))
{
return;
}
else
{
printf("当前队列是:");
int i=pQueue->front;
while(i!=pQueue->rear)
{
printf("%d ",pQueue->pBase[i]);
i=(i+1)%pQueue->initLen;
}
printf("\n");
return;
}
}
bool isEmptyQueue(PQUEUE pQueue)
{
if(pQueue->rear==pQueue->front&pQueue->initLen!=0)
{
printf("空队列!\n");
return true;
}else{
return false;
}
}
- 循环队列操作实现
- 循环队列的操作
- 循环队列基本操作
- 循环队列操作
- 循环队列操作
- 循环队列操作
- 循环队列基本操作
- 循环队列基本操作
- 循环队列操作
- 循环队列有关操作
- 循环队列操作代码
- 循环队列有关操作
- 循环队列的操作
- 循环队列的操作(循环队列)
- 顺序循环队列一些操作
- 循环队列的相关操作
- 数据结构之循环队列操作
- 循环队列的基本操作
- 工资2000的人看2遍 5000的看5遍 1W以上的请背下它
- 【设计模式】手机软件何时统一 ---- 桥接模式
- GameEntity & Component
- Linux常用命令
- java 中的Class类对象
- 循环队列操作
- C/C++ 数组与地址的关系
- 两张表对比并更新操作【求助】
- poj 2762(弱联通:强连通+缩点+拓扑排序)
- 正则表达式符号解释
- linux lcd驱动分析四
- Repair filesystem模式修复方法
- win7与Ubuntu 12.04双系统修改启动项顺序
- 马化腾谈互联网产品创新:灰度法则的七个维度