本文目錄一覽:
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
原創文章,作者:EGYO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/148127.html