void ポインターを使用して C で基本的なキュー構造を実装しました。手順は次のとおりです。
- 構造体の初期化 - キューに格納する変数の型のサイズを設定しました
- プッシュ - 格納する変数へのポインターを渡すと、キューはそれ自体のコピーを取得します
- front - 構造体は void* を前の要素に返します。ポインタをつかむだけかもしれませ
memcpy()
んし、ローカル コピーを持っているかもしれません。
構造体自体は次のようになります。
struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};
start と end は、現在割り当てられているメモリ ブロック内のある場所を指す単なる void ポインターです。要素をキューにプッシュすると、エンド ポインターが だけインクリメントされvarsize
ます。pop() の場合、エンド ポインターも だけ減分しますvarsize
。
ここに関数コードを投稿する必要はないと思います。100 行を超えています。
質問:これは良い習慣と考えられますか、それとも悪い習慣と考えられますか? なぜだめですか)?
注: C のキューには他にも多くのオプションがあることは承知しています。このオプションの品質について質問しているだけです。
編集: 実装はここで入手できます: http:// 89.70.149.19 /stuff/queue.txt (スペースを削除してください)