本文目录一览:
C语言,请用数组作个循环队列
a#include
"Stdio.h"
#include
stdlib.h
#include
"Conio.h"
#include
"malloc.h"
#define
TRUE
1
#define
FALSE
#define
INFEASIBLE
1
#define
OVERFLOW
-2
#define
OK
1
#define
ERROR
#define
MAXQSEZE
100
/*最大队列长度*/
typedef
int
QElemType;
typedef
int
Status;
typedef
struct{
QElemType
*base;
/*初始化的动态分配存储空间*/
int
front;
/*头指针,若队列不空,指向队列头元素*/
int
rear;
/*尾指针,若队列不空,指向队列尾元素的下一位置*/
}SqQueue;
Status
Queuelength(SqQueue
*Q){
/*构造一个空的循环队列*/
Q-base=(QElemType
*)malloc(MAXQSEZE*sizeof(SqQueue));
if(!Q-base)
exit(OVERFLOW);
/*存储分配失败*/
Q-front=Q-rear=0;
return
OK;
}
Status
EnQueue(SqQueue
*Q,QElemType
e){
/*插入元素e为Q的新的队尾元素*/
if((Q-rear+1)%MAXQSEZE==Q-front)
return
ERROR;/*队列满*/
Q-base[Q-rear]=e;
Q-rear=(Q-rear+1)%MAXQSEZE;
return
OK;
}
Status
DeQueue(SqQueue
*Q,QElemType
*e){
/*若队列不空,则删除Q的队头元素,用e返回其值*/
/*否则返回ERROR*/
if(Q-front==Q-rear)
return
ERROR;
*e=Q-base[Q-front];
Q-front=(Q-front+1)%MAXQSEZE;
return
OK;
}
Status
GetHead(SqQueue
*Q,QElemType
*e){
/*队列不为空用e返回Q的头元素,并返回OK,否则返回ERROR*/
if(Q-front==Q-rear)
return
ERROR;
*e=Q-base[Q-front];
return
OK;
}
Status
QueueEmpty(SqQueue
*Q){
/*队列为空时返回OK否则返回FALSE*/
if(Q-front==Q-rear)
return
OK;
return
FALSE;
}
void
yanghuiTriangle(int
n){
/*打印输出杨辉三角的钱n(n0)行*/
SqQueue
Q;
char
ch='
';
int
i,k;
QElemType
s,e;
FILE
*fq;
if((fq=fopen("output.txt","w"))==NULL){
/*打开写入文件*/
printf("error
on
open\n");
exit
(1);
}
Queuelength(Q);
/*创建空的队列*/
for(i=1;in;i++)
{
printf("
");
fputc(ch,fq);}
/*输出n个空格以保持三角形的队形*/
printf("1\n");
fprintf(fq,"%d\n",1);
EnQueue(Q,0);
/*添加第一行末尾的行分界0并入队*/
EnQueue(Q,1);
/*第二行的两个1值入队列*/
EnQueue(Q,1);
k=2;
while(kn){
/*通过循环队列输出第2行到第n-1行的值*/
for(i=1;i=n-k;i++)
{printf("
");
fputc(ch,fq);}
/*输出n-k个空格以保持三角形*/
EnQueue(Q,0);
do{
/*输出第k行,计算第k+1行*/
DeQueue(Q,s);
GetHead(Q,e);
if(e)
/*若e为非行分界值0,则打印输出e的值,并加一空格*/
{printf("%d
",e);
fprintf(fq,"%d%c",e,ch);
}
else
{
printf("\n");
fputc('\n',fq);}
/*回车换行,为下一行输出做准备*/
EnQueue(Q,s+e);
/*计算所得抵k+1行的值入队列*/
}while(e!=0);
k++;
}
DeQueue(Q,e);
/*行界值“0“出队列*/
while(!QueueEmpty(Q)){
/*单独处理第n行的值的输出*/
DeQueue(Q,e);
{
printf("%d
",e);
fprintf(fq,"%d%c",e,ch);
}
}
}
int
main(void)
{
FILE
*
fp;
QElemType
n;
if((fp=fopen("input.txt","r"))==NULL){
/*打开写入文件*/
printf("error
on
open\n");
exit
(1);
}
fscanf(fp,"%d",n);
/*读入n*/
fclose(fp);
yanghuiTriangle(n);
getch();
return
0;
}
用一个文件输入一个N,这个数位杨辉三角的行数上面是用循环队列做的,你看看
c语言循环队列
s表示的是循环队列的成员个数
front是队列的头指针
rear是队列的尾指针
s=0表示循环队列中的成员个数为0,当然也就是队列为空了
s=1表示循环队列中的成员个数为1,front=rear说明队列的头指针和尾指针都指向同一个队列成员,也就是说这个/队列已经封闭了(首尾已经相接),那么这个队列也就满了
front=rear=m其中的m也不晓得是什么了
这个m就是具体的成员的地址了,front=rear=m,m就成了当前循环队列中唯一的成员
二级c语言,队列、循环队列是什么?
队列是一种特殊的线性表,循环队列是将向量空间想象为一个首尾相接的圆环。
1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
2、循环队列是将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。 在顺序队列中,当队尾指针已经到数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫做“假溢出”,解决假溢出的途径----采用循环队列。
扩展资料
判断队列满的情况:
1、count来计数;通常使用count
Count等于队列的MAXSIZE
2、Flag标志 int
入队列 flag=1 出队列flag=0
Front=rearflag==0
3、把一个存储单元空出来,不存放数据
Rear+1==front
注意事项:(不要) 顺序结构,SeqQueue myQueue;
参考资料来源:百度百科—循环队列
C语言用数组实现循环队列的入队出队
//定义一个int型数组que,长度为N(常量切大于2).
int que[N];
int rear=0,front=0; //队尾 队头
判断队列已满:
if((front+1)%N==rear%N) //成立则队列已满
判断队列为空
if((rear==front)) //成立则队列空
入队(一般在入队前判断队列是否已满)
//将val入队
que[front++]=val;
front%=N;
出队(一般在出队前判断队列是否为空)
rear=(rear+1)%N;
下一个要出队的元素(一般先判断是否为空)
que[rear];
C语言循环队列问题求教
这个并没有错,可以根据图分开来算
front指针指向存储元素位置,rear指针指向第一个未存储元素位置
首先,队列上半部分,有元素,m-30+1;
其次,队列下半部分,有元素,10-1;
所以,总共的元素个数为total = m-30+1+10-1 = m-20