#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct Student{
int number;// 学生の学籍番号
char name[10];// 学生の苗字
struct Student *next;
};
int main(){
int in_number;
struct Student *pointer_root;
pointer_root = (struct Student *)malloc( sizeof(struct Student) );
printf("今からデータを自動的に登録して、課題4のリスト構造を作成します。\n");
struct Student *pointer_student;// リスト構造の各要素のメモリ番地を動いて行くポインタ変数
pointer_student = pointer_root;
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 1);
pointer_student->number = 175;
strcpy(pointer_student->name, "tanaka");
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 2);
pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
pointer_student = pointer_student->next;
pointer_student->number = 176;
strcpy(pointer_student->name, "yamada");
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 3);
pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
pointer_student = pointer_student->next;
pointer_student->number = 177;
strcpy(pointer_student->name, "nakamura");
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 4);
pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
pointer_student = pointer_student->next;
pointer_student->number = 178;
strcpy(pointer_student->name, "aoki");
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 5);
pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
pointer_student = pointer_student->next;
pointer_student->number = 179;
strcpy(pointer_student->name, "katoh");
printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 6);
pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
pointer_student = pointer_student->next;
pointer_student->number = 180;
strcpy(pointer_student->name, "suzuki");
pointer_student->next = NULL;
printf("\n");
printf("名簿に登録された学生のリストを表示します。\n");
pointer_student = pointer_root;
while(1){
printf( "%d %s \n", pointer_student->number , pointer_student->name );
pointer_student = pointer_student->next;
if( pointer_student == NULL ){ break; }
}
printf("\n");
printf("学籍番号を入力してください。その番号の学生を削除します。");
scanf( "%d", &in_number );
pointer_student = pointer_root;
if( pointer_student->number == in_number ){
printf("学籍番号 %d の学生 %s を削除します。\n", pointer_student->number, pointer_student->name );
pointer_root = pointer_student->next;
free( pointer_student );
}
else{
struct Student *pointer_previous_student;
while(1){
pointer_previous_student = pointer_student;
pointer_student = pointer_student->next;
if( pointer_student->number == in_number ){
printf("学籍番号 %d の学生 %s を削除します。\n", pointer_student->number, pointer_student->name );
pointer_previous_student->next = pointer_student->next;
free( pointer_student );
break;
}
}
}
printf("\n");
printf("名簿に登録された学生のリストを 改めて表示します。\n");
pointer_student = pointer_root;
while(1){
printf( "%d %s \n", pointer_student->number , pointer_student->name );
pointer_student = pointer_student->next;
if( pointer_student == NULL ){ break; }
}
return 0;
}