首页 > 编程知识 正文

c语言中循环队列图示,C语言实现循环队列

时间:2023-12-29 13:16:37 阅读:329833 作者:UGPC

本文目录一览:

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

openn");

exit

(1);

}

Queuelength(Q);

/*创建空的队列*/

for(i=1;in;i++)

{

printf("

");

fputc(ch,fq);}

/*输出n个空格以保持三角形的队形*/

printf("1n");

fprintf(fq,"%dn",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

openn");

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。