ページ 11

リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 12:55
by po_po
リストを使って新しく入力された値を先頭に格納するプログラムなのですが、どのような仕組みで動いているのか全くわかりません。
どういう仕組みで動いているのか詳しく教えてくれるとありがたいです。

コード:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct list{
  char name[20];
  int age;
  struct list *next;
};

int main(void){
  struct list *head;
  struct list *dummy, *new, *prev, *current;

  dummy = (struct list *)malloc(sizeof(struct list));
  strcpy(dummy->name, "");
  dummy->age=0;
  dummy->next=NULL;
  head=dummy;

  while((new = (struct list *)malloc(sizeof(struct list)) )){
    printf("氏名と年齢をスペースで区切って入力してください\n");
    if(scanf("%s%d", new->name, &new->age)==EOF) break;
    current = head;
    prev = head;

  while( current!=NULL){
    prev = current;
    current = current->next;
  }
  new->next = current;
  prev->next = new;
  
  }
}

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 14:01
by non
po_po さんが書きました:リストを使って新しく入力された値を先頭に格納するプログラムなのですが、
本当にリストの先頭に格納されていますか?確認はしましたか?

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 15:03
by po_po
すいません先頭ではなくheadの次に入力順に格納されていきます

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 15:46
by non
最後尾だと思うのですが?

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 16:00
by po_po
勘違いしていました。
headの次に1番目に入力したデータ、その次に2番目に入力したデータ・・・といった風に格納されていきます。
プログラムで下の部分が何をしているのかがわかりません

コード:

current = head;
    prev = head;
 
  while( current!=NULL){
    prev = current;
    current = current->next;

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 17:56
by non
リストの課題では絵を必ず描いて下さい。
4行目でcuurentはNULLになります。
prevはcurrentを後追い(5行目)してますから、NULLの前、つまり最後尾のノードを指します。

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月28日(木) 20:36
by po_po
1行目と2行目でcurrentとprevにheadを代入しているのでcurrentとprevには毎ループごとにNULLが入るのですか?

コード:

current = head;
    prev = head;
 
  while( current!=NULL){
    prev = current;
    current = current->next;

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月29日(金) 09:41
by non
po_po さんが書きました:1行目と2行目でcurrentとprevにheadを代入しているのでcurrentとprevには毎ループごとにNULLが入るのですか?
ちょっと意味がわからないです。少なくとも、prevがNULLになることはありません。
手書きできたないですが、絵を添付します。

Re: リストを使って入力順に値を格納するプログラム

Posted: 2016年1月29日(金) 20:06
by po_po
やっと理解できました。
わざわざ絵まで書いてもらってありがとうございます。