以下は私のキュー実装です。私のキューは単に頭と後ろの2つのqノードの配列です。エンキューとデキューは、内部キューの実装を処理することになっています。このキューインプリメンテーションで何が問題になっていますか?
異なる整数でエンキューを呼び出すと、Q[0].next == Q[1].next
への出力は1になります。私は間違いを理解することができません。
struct Qnode{
int index;
struct Qnode *next;
};
typedef struct Qnode qnode;
qnode* makeQueue(){
qnode *Q;
Q = (qnode *) malloc(2*sizeof(qnode));
qnode head,tail;
head.next = NULL;
tail.next = NULL;
head.index = 0;
tail.index = -1;
Q[0] = head;
Q[1] = tail;
return Q;
}
void enQueue(qnode *Q, int index){
qnode node,head = Q[0], rear = Q[1];
node.index = index;
node.next = NULL;
if(head.next == NULL && rear.next == NULL){
head.next = &node;
rear.next = &node;
}
else{
(rear.next)->next = &node;
rear.next = &node;
}
Q[0].index = head.index + 1;
}
あなたはenQueue
機能
qnode node,head = Q[0], rear = Q[1];
node.index = index;
node.next = NULL;
if(head.next == NULL && rear.next == NULL){
head.next = &node;
rear.next = &node;
}
に問題があるおかげ
malloc(2 * sizeof(qnode)); '? – Groo
Q自体は2つのqノードの配列 –
最初は2ノードの*配列*ではなく、*リンクリスト*になります。ヘッドノードは最初のノードを指すようにするか、 'NULL'。あなたの 'enqueue'関数は必要に応じてノードを割り当てるべきです。 [例](https://gist.github.com/mycodeschool/7510222)。 – Groo