整数をデータとする頭つき双連結環状リストを定義し、リストを「9」 だけを含むように初期化し、内容を打ち出す例題が示されている。この 初期化と打ち出しの間に、複数の整数を入力し(0で終了)、そのデータ を持つセルを「渡されたセルの次以降に入力された順で挿入する」(つ まり入力1つについて1つずつセルを新規作成する)関数funcの呼び出し を挿入したい。パラメタには「9」のセルを渡す(例示では呼び出しはコ メントになっている)。たとえば、「1 2 3 4 5 0」を入力したとき、環 状リスト全体は「9 1 2 3 4 5」となる。関数funcを作成せよ。再帰お よび配列は用いないこと。
#include <stdbool.h> #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *prev, *next; }; typedef struct node *nodep; nodep newnode(int d, nodep p, nodep q) { nodep r = (nodep)malloc(sizeof(struct node)); r->data = d; r->prev = p; r->next = q; return r; } void plist(nodep p) { nodep q = p->next; while(q != p) { printf(" %d", q->data); q = q->next; } printf("\n"); } int main(void) { nodep head = newnode(-1, NULL, NULL); nodep p = newnode(9, head, head); head->prev = head->next = p; // func(p); plist(head); return 0; }
コード | 選択肢 |
ア void func(nodep p) {
イ }
ウ int i;
エ nodep q;
オ if(i == 0) {
カ while(true) {
キ return;
ク printf("i> "); scanf("%d", &i);
ケ p = q;
コ p->next = q;
サ p->next->prev = q;
シ p->prev = q;
ス p->prev->next = q;
セ q = newnode(i, p, p->next);
ソ q = newnode(i, p->prev, p);
|
選択肢の行をドラグして上のコード領域に配置してください。 コード領域の行はドラグにより位置が変更できます。 削除したい場合は選択肢の領域に戻してください。