#3
by かずま » 8年前
かずま さんが書きました:理解できますか?
これを参考に、プログラム全体を書き直して貼り付けてください。
無駄な空行はつけないでほしい。
できれば、何番目にでも挿入できる汎用的なコードにしてください。
質問者は、なぜ返信してこないのだろうか?
理解できないのなら、そう言ってくれれば、詳しく説明するのに。
汎用的なコードです。
コード:
#include <stdlib.h>
#define N 10
struct cell {
int data;
struct cell *next;
};
typedef struct cell Cell;
void print(const Cell *p)
{
for (; p; p = p->next)
printf(" %d", p->data);
putchar('\n');
}
Cell *insert(Cell *head, int data, int n)
{
Cell *p = (Cell *)malloc(sizeof(Cell));
p->data = data;
if (--n <= 0 || head == NULL) {
p->next = head;
return p;
}
Cell *q = head;
for (int i = 1; i < n && q->next; i++)
q = q->next;
p->next = q->next;
q->next = p;
return head;
}
int main(void)
{
Cell *head = NULL;
for (int i = 0; i < N; i++) {
Cell *p = (Cell *)malloc(sizeof(Cell));
p->data = 10 + (int)(rand()*(50-10+1.0)/(1.0+RAND_MAX));
p->next = head;
head = p;
}
print(head);
int n, data = 100;
while (printf("n: "), scanf("%d", &n) == 1) {
head = insert(head, data++, n);
print(head);
}
return 0;
}
実行結果
コード:
40 43 46 24 29 33 43 17 33 10
n: 3
40 43 100 46 24 29 33 43 17 33 10
n: 11
40 43 100 46 24 29 33 43 17 33 101 10
n: 13
40 43 100 46 24 29 33 43 17 33 101 10 102
n: 1
103 40 43 100 46 24 29 33 43 17 33 101 10 102
n: 0
104 103 40 43 100 46 24 29 33 43 17 33 101 10 102
n: .
[quote="かずま" id=3,19173,145245]理解できますか?
これを参考に、プログラム全体を書き直して貼り付けてください。
無駄な空行はつけないでほしい。
できれば、何番目にでも挿入できる汎用的なコードにしてください。[/quote]
質問者は、なぜ返信してこないのだろうか?
理解できないのなら、そう言ってくれれば、詳しく説明するのに。
汎用的なコードです。
[code=c]
#include <stdlib.h>
#define N 10
struct cell {
int data;
struct cell *next;
};
typedef struct cell Cell;
void print(const Cell *p)
{
for (; p; p = p->next)
printf(" %d", p->data);
putchar('\n');
}
Cell *insert(Cell *head, int data, int n)
{
Cell *p = (Cell *)malloc(sizeof(Cell));
p->data = data;
if (--n <= 0 || head == NULL) {
p->next = head;
return p;
}
Cell *q = head;
for (int i = 1; i < n && q->next; i++)
q = q->next;
p->next = q->next;
q->next = p;
return head;
}
int main(void)
{
Cell *head = NULL;
for (int i = 0; i < N; i++) {
Cell *p = (Cell *)malloc(sizeof(Cell));
p->data = 10 + (int)(rand()*(50-10+1.0)/(1.0+RAND_MAX));
p->next = head;
head = p;
}
print(head);
int n, data = 100;
while (printf("n: "), scanf("%d", &n) == 1) {
head = insert(head, data++, n);
print(head);
}
return 0;
}
[/code]
実行結果
[code=text]
40 43 46 24 29 33 43 17 33 10
n: 3
40 43 100 46 24 29 33 43 17 33 10
n: 11
40 43 100 46 24 29 33 43 17 33 101 10
n: 13
40 43 100 46 24 29 33 43 17 33 101 10 102
n: 1
103 40 43 100 46 24 29 33 43 17 33 101 10 102
n: 0
104 103 40 43 100 46 24 29 33 43 17 33 101 10 102
n: .
[/code]