4、循環キュー(C言語)を達成します


下記に示すように、まず、原理を達成するために

 

環状キューの実装は、以下の4つの点(「3、キューの簡単な実装」本質として)ことに留意すべきである:
(1)キューライトデータ
のmemcpy(&g_tQue [g_iWritePos]、•PNODE、はsizeof(T_QUEUE));
g_iWritePos =(g_iWritePos + 1)%QUEUE_SIZE_MAX 。

(2)キューから読み出さ
のmemcpy(•PNODE、&g_tQue [g_iReadPos]、はsizeof(T_QUEUEを));
g_iReadPos =(+ g_iReadPos 1)%QUEUE_SIZE_MAX;
(3)データキューが満たされる
((g_iWritePos + 1)%QUEUE_SIZE_MAX ) g_iReadPos ==) 読み出すべき位置に等しい次の書き込み位置、
キューがQUEUE_SIZE_MAXが内部に格納され、キューが一杯になったとき、実際には、充填されている- 1つのデータ、及び空にするためにそうする
の担当するキュー領域を

(4)待ち行列が空(データなし)である
g_iWritePos == g_iReadPos現在位置が現在の書き込み位置を書き込むに等しく、キューが空である
2つの次のコードを達成するために

 

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3の#include <STDLIB.H>
 4  
5  の#define QUEUE_SIZE_MAX 10            
 6  の#define MY_BUF_SIZE 128
 7  
8のtypedef 構造体{
 9      のint タイプ。
10      int型の準備。
11      INT [MY_BUF_SIZE] BUF。
12  } T_QUEUE。
13  
14  静的T_QUEUE g_tQue [QUEUE_SIZE_MAX]。
15  
16  静的 INT g_iReadPos = 0 17  静的 int型 g_iWritePos = 0 ;;
18  
19  静的 INT isFull(ボイド20  {
 21      リターン(((g_iWritePos + 1)%QUEUE_SIZE_MAX)== g_iReadPos)。
22  }
 23  
24  静的 INTのisEmpty(ボイド25  {
 26      リターン(g_iWritePos == g_iReadPos)。
27  }
 28  
29  静的 INT PutData(T_QUEUE * PNODE)
 30  {
 31     もし(isFull())
 32      {
 33          のprintf(" quequeがオーバーフローである\ Rを\ n!" )。
34          リターン - 1 35      }
 36      他の
37      {
 38          のmemcpy(&g_tQue [g_iWritePos]、PNODE、はsizeof (T_QUEUE))。    
39          g_iWritePos =(g_iWritePos + 1)%QUEUE_SIZE_MAX。
40          リターン 0 ;
41      }
 42  }
 43  
44  静的 INTのGetData(T_QUEUE *PNODE)
 45  {
 46      であれば(のisEmpty())
 47      {
 48          のprintf(" quequeが空である\ rをする\ n!" )。
49          リターン - 1 50      }
 51      他の
52      {
 53          のmemcpy(PNODE、&g_tQue [g_iReadPos]、はsizeof (T_QUEUE))。
54          g_iReadPos =(g_iReadPos + 1)%QUEUE_SIZE_MAX。
55      }
 56      
57 }

 

おすすめ

転載: www.cnblogs.com/sbtblogs/p/11332347.html