C言語で循環キューを実現
本論文の例では、C言語の循環行列を実現するための具体的なコードを共有します。
注意事項:
1、循環行列は、キューの順序表示と実現である。後進ヘッダのために、順序スタックとは違って、後端がいっぱいになった後に頭の空格子点から挿入するために、順番待ち行列の憶測を環状の空間にする必要がある。
2、配列行列、すなわちダイナミックに成長できない順序行列を使ってもいいです。このように各モードの最大値を取ってリング空間を構成する必要はありません。新しいキューの最後の要素を挿入するたびに、最後のポインタが1つ増えます。キューの先頭要素を削除するたびに、ヘッドポインタが1つ増えます。
3、テールポインタはヘッドポインタの前に現れます。これによって、循環行列は大きい時間を予測できないので、使うべきではないです。
4、各ポインタがインクリメントされた表式では、MAXQUUE%を追加する必要があります。毎回の増値は範囲内にあります。
注意事項:
1、循環行列は、キューの順序表示と実現である。後進ヘッダのために、順序スタックとは違って、後端がいっぱいになった後に頭の空格子点から挿入するために、順番待ち行列の憶測を環状の空間にする必要がある。
2、配列行列、すなわちダイナミックに成長できない順序行列を使ってもいいです。このように各モードの最大値を取ってリング空間を構成する必要はありません。新しいキューの最後の要素を挿入するたびに、最後のポインタが1つ増えます。キューの先頭要素を削除するたびに、ヘッドポインタが1つ増えます。
3、テールポインタはヘッドポインタの前に現れます。これによって、循環行列は大きい時間を予測できないので、使うべきではないです。
4、各ポインタがインクリメントされた表式では、MAXQUUE%を追加する必要があります。毎回の増値は範囲内にあります。
#include<stdio.h>
#include<stdlib.h>
#define MAXQUEUE 100
typedef struct
{
int *base;
int front;
int rear;
}SqQueue, *Sqqueue;
Sqqueue Creat(Sqqueue q);
void Enqueue(Sqqueue q, int e);
void Dequeue(Sqqueue q, int *e);
void Traverse(Sqqueue q);
int main()
{
SqQueue q;
int e;
Sqqueue p = Creat(&q);
Traverse(p);
Dequeue(p, &e);
Traverse(p);
printf("the number that was deleted is :%d", e);
return 0;
}
Sqqueue Creat(Sqqueue q)
{
Sqqueue p = q;
p->base = (int *)malloc(MAXQUEUE * sizeof(int));// , , base
p->front = p->rear = 0;
for (int i = 1; i < 10; i++)
Enqueue(p, i);
return p;
}
void Enqueue(Sqqueue q, int e)
{
if ((q->rear + 1) % MAXQUEUE == q->front) // , ( )。 。
exit(1);
q->base[q->rear] = e;
q->rear = (q->rear + 1) % MAXQUEUE;
}
void Dequeue(Sqqueue q, int *e)
{
if (q->front == q->rear)
exit(1);
(*e) = q->base[q->front];
q->front = (q->front + 1) % MAXQUEUE;
}
void Traverse(Sqqueue q)
{
for (int i = q->front; q->rear != i; i = (i + 1) % MAXQUEUE)
printf("%d->", q->base[i]);
printf("NULL
");
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。