0
循環リンクリストを使用するキューコレクションを実装するために、これらの構造宣言が与えられています。cでリンクリストにキューを実装する方法は?
typedef struct intnode {
int value;
struct intnode *next;
} intnode_t;
typedef struct {
intnode_t *rear; // Points to the node at the tail of the
// queue's linked list
int size; // The # of nodes in the queue's linked list
} intqueue_t;
intnode_t *intnode_construct(int value, intnode_t *next)
{
intnode_t *p = malloc(sizeof(intnode_t));
assert (p != NULL);
p->value = value;
p->next = next;
return p;
}
/* Return a pointer to a new, empty queue.
* Terminate (via assert) if memory for the queue cannot be allocated.
*/
intqueue_t *intqueue_construct(void)
{
intqueue_t *queue = malloc(sizeof(intqueue_t));
assert(queue != NULL);
queue->rear = NULL;
queue->size = 0;
return queue;
}
私は(キューの後ろに追加します)指定された値でエンキューする関数を作成しようとしている、と私はキューが空である2例を検討する必要があるとキューには1つ以上の要素があります。このコードは、私が間違っていただきましたわからないので、ランタイムエラーを与える
void intqueue_enqueue(intqueue_t *queue, int value)
{
intnode_t *p = intnode_construct(value, NULL);
if(queue->rear->next == NULL) {
//the queue is empty
queue->rear->next =p;
} else {
//the queue is not empty
queue->rear=p;
}
queue->rear=p;
queue->size++;
}
:これは私がこれまで持っているコードです。コードでは、私はキュー - >リア - >次が前面であると仮定していますが、これは問題がどこにあるのかと思います。すべての援助は非常に高く評価されます。ありがとう!
はUPDATE--
私は、コードを手直ししようとし、これを持っている:それは空である場合にのみ、この作品
void intqueue_enqueue(intqueue_t *queue, int value)
{
assert(queue!=NULL);
intnode_t *p = intnode_construct(value,NULL);
if (queue->size==0){
queue->rear=p;
queue->size++;
queue->rear->next=p;
free(p);
}
else {
p->next = queue->rear;
queue->rear=p;
queue->size++;
free(p);
}
}
が、それは空ではありませんではないとき。リンクされたリストの
循環リンクリストである必要がありますか?それは物事を複雑にし、フロントとリアのポインタが許可されている場合、キューには必要ありません。 –
はい、これは私が与えられたものです – student17