當前位置:首頁 » 編程語言 » c語言循環隊列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言循環隊列

發布時間: 2022-02-09 04:44:07

1. c語言中循環隊列的隊滿和隊空的判斷條件各是什麼有什麼不同

隊空時: Q.front == Q.rear;

隊滿時: Q.front == (Q.rear + 1) % MAXSIZE;

front指向隊首元素,rear指向隊尾元素的下一個元素。

maxsize是隊列長度。

(1)c語言循環隊列擴展閱讀:

實現的代碼:

#include <stdio.h>

#include <malloc.h>

#define MAXSIZE 100 //最大隊列長度

#define OK 1

#define ERROR 0

typedef int ElemType;

typedef int Status;

typedef struct {

ElemType *base; //隊列空間

int front; //隊頭指針

int rear; //隊尾指針,若隊尾不為空,則指向隊尾元素的下一個位置

}SqQueue;

//初始化循環隊列

Status initQueue(SqQueue &Q) {

Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType)); //申請空間

Q.front = Q.rear = 0; //隊空

return OK;

}

//入隊

Status enQueue(SqQueue &Q, ElemType e) {

if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //隊滿,無法添加

Q.base[Q.rear] = e; //插入元素

Q.rear = (Q.rear + 1) % MAXSIZE; //隊尾指針+1

return OK;

}

//出隊

Status deQueue(SqQueue &Q, ElemType &e) {

if (Q.front == Q.rear) return ERROR; //隊空,無法刪除

e = Q.base[Q.front]

Q.front = (Q.front + 1) % MAXSIZE; //隊頭指針+1

return OK;

}

//返回隊列長度

Status length(SqQueue &Q) {

return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;

}

2. C語言循環隊列

簡單的程序,先構造一個循環鏈表,包括N個緩寸區和一個額外的區域(便於隊列的操作).
輸入1時,消費者輸出.
輸入其他數字時,生成者輸入.
#include <stdio.h>
#define N 10

struct queue
{
int data;
queue *front;
};

int main()
{
int i, choice;
queue *head;
queue *tail;
queue *temp;
head = tail = new queue;
temp = new queue;
temp->front = head;
tail->front = temp;

for(i=1; i<N; i++)
{
temp->front = new queue;
temp = temp->front;
temp->front = head;
}
tail = temp;

while(true)
{
scanf("%d", &choice);
if(choice == 1) //consumer
{
if(head == tail->front) break;
printf("消費:%d\n", head->data);
head = head->front;
}
else //proctor
{
if(tail->front->front == head) break;
printf("生產:\n");
scanf("%d", &tail->front->data);
tail = tail->front;
}
}
return 0;
}

3. C語言這道題循環隊列元素個數怎麼算

應該是:Q->front=(Q->front+1)%QueueSize循環隊列的設計思路是:設想向量Q->data[QueueSize]是一個首尾相接的圓環,即Q->data[0]接在Q->data[QueueSize-1]之後,這種意義下的向量稱為循環向量,並將循環向量中的隊列稱為循環隊列。針對你這道題,QueueSize為10,所以數組最大下標為9,則array[9]的下一個元素為array[0]來實現循環。舉個例子來說吧,出隊操作,在循環意義下頭指針加1,如果Q->front現在為9(即指向下標為9的元素),則(Q->front+1)%10為(9+1)%10結果為0,所以代表出隊後Q->front為0(即指向下標為0的元素),從而實現循環。

4. C語言用數組實現循環隊列的入隊出隊

//定義一個int型數組que,長度為N(常量切大於2).
intque[N];
intrear=0,front=0;//隊尾隊頭

判斷隊列已滿:

if((front+1)%N==rear%N)//成立則隊列已滿

判斷隊列為空

if((rear==front))//成立則隊列空

入隊(一般在入隊前判斷隊列是否已滿)

//將val入隊
que[front++]=val;
front%=N;

出隊(一般在出隊前判斷隊列是否為空)

rear=(rear+1)%N;

下一個要出隊的元素(一般先判斷是否為空)

que[rear];

5. C語言中循環隊列中的元素是怎麼計算的

開始、結束的地址

~~~~~

6. c語言循環隊列的錯誤修改

函數visit定義時形參char(q.base)不可用,改成一個指針char *a即可;

main函數里:第一個for循環結束後第二行:queuetraverse_sq(q, int(*e));
e不能做queuetraverse_sq(這個函數名太長了....我後面寫函數1好吧)的實參。函數1的形參2是一個指向函數的指針。實際上函數1不需要第二個參數,在定義的時候直接寫queuestraverse_sq(sqqueue q){/*....*/}就可以了。

最後把所有函數1的第二參數都刪掉就行了。

7. C語言,請用數組作個循環隊列

a#include
"Stdio.h"
#include
<stdlib.h>
#include
"Conio.h"
#include
"malloc.h"
#define
TRUE
1
#define
FALSE
0
#define
INFEASIBLE
1
#define
OVERFLOW
-2
#define
OK
1
#define
ERROR
0
#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(n>0)行*/

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;i<n;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(k<n){
/*通過循環隊列輸出第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,這個數位楊輝三角的行數上面是用循環隊列做的,你看看

8. 數據結構循環隊列(C語言實現)

這是約瑟夫問題,參見
http://ke..com/link?url=T1pJ7-

9. c語言循環隊列

隊列是一種特殊的線性表,循環隊列是將向量空間想像為一個首尾相接的圓環。

隊列是一個特殊的線性表,它的特殊之處在於它只允許表的前面的操作刪除,而在表的後面的操作插入,就像堆棧一樣,隊列100是一個線性表,具有有限的操作。

循環隊列就是把向量空間想像成一個首尾相連的環,把這樣的向量稱為循環向量。存儲學位的隊列稱為循環隊列。

在順序隊列中,當指向隊列末端的指針到達數組的上界時,不能有更多的隊列條目,但數組中仍然有一個空位置。這稱為「假溢出」。

(9)c語言循環隊列擴展閱讀:

判斷滿隊列狀態:

1.計數;你通常使用count

Count等於隊列的MAXSIZE

2.國旗int

Queueinflag=1Queueoutflag=0

= && flag = = 0的前面和後面

3.放一個存儲應答單元為空,不存儲數據

後面+1=前面

註:(不)順序結構,SeqQueuemyQueue;

10. 二級c語言,隊列、循環隊列是什麼

隊列是一種特殊的線性表,循環隊列是將向量空間想像為一個首尾相接的圓環。

1、隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。

2、循環隊列是將向量空間想像為一個首尾相接的圓環,並稱這種向量為循環向量。存儲在其中的隊列稱為循環隊列。在順序隊列中,當隊尾指針已經到數組的上界,不能再有入隊操作,但其實數組中還有空位置,這就叫做「假溢出」,解決假溢出的途徑----採用循環隊列。

(10)c語言循環隊列擴展閱讀

判斷隊列滿的情況:

1、count來計數;通常使用count

Count等於隊列的MAXSIZE

2、Flag標志 int

入隊列 flag=1 出隊列flag=0

Front=rear&&flag==0

3、把一個存儲單元空出來,不存放數據

Rear+1==front

注意事項:(不要) 順序結構,SeqQueue myQueue;