構造体の配列

space.gif
line.gif
space.gif
プログラム言語を名前順に並べる。
Name Next
1 Assembler 0
2 Cobol 0
3 Fortran 0
4 ALGOL 0
5 PL/I 0
6 BASIC 0
7 Pascal 0
8 C 0
9 Ada 0
10 Modula2 0
space.gif
line.gif
space.gif
流れ図
flowS.GIF
space.gif
line.gif
space.gif
Name Next
0 9
1 Assembler 6
2 Cobol 3
3 Fortran 10
4 ALGOL 1
5 PL/I 0
6 BASIC 8
7 Pascal 5
8 C 2
9 Ada 4
10 Modula2 7
space.gif
line.gif
space.gif

構造体

文法
機能
レコードを表す。
フィールドを”メンバー”という。
メンバーの参照とメンバーへの代入が可能
space.gif
line.gif
space.gif
形式
(1)構造体の宣言
(構造体タグは省略可能)
space.gif
struct 構造体タグ{
space.gif メンバ1;
space.gif メンバ2;
space.gif ...
}
space.gif
line.gif
space.gif
構造体の変数宣言

struct { ... } 変数;
space.gif
構造体タグをつけて構造体が宣言されている場合

struct 構造体タグ 変数;
space.gif
line.gif
space.gif
typedef宣言を利用した構造体宣言

typedef struct { ... } 型名;
space.gif
上で定義した型を使った変数宣言

型名 変数;
space.gif
line.gif
space.gif
(2)メンバの参照

変数名.メンバ
space.gif
(3)メンバへの代入

変数名.メンバ = 値;
space.gif
line.gif
space.gif
ソートプログラム(名前順に並べる)
#include<stdio.h>
#include<string.h>

void initList(void);
void print_list(void);
void sort(void);

struct list{
space.gif char name[15];
space.gif int next;
};

struct list language[11];

int main( void ){
space.gif int i=0;

space.gif initList();
space.gif sort();
space.gif print_list();

space.gif return 0;
}

void initList(void){
space.gif int i= 0;

space.gif for(i=1;i<=10;i++){
space.gif printf("Input Language %d:", i);
space.gif scanf("%s", language[i].name);
space.gif language[i].next = 0;
space.gif }
}

void print_list(void){
space.gif int i;
space.gif for(i=language[0].next; i>0; i = language[i].next){
space.gif printf("%s\n", language[i].name);
space.gif }
}

void sort(void){
space.gif int i,j,k;
space.gif language[0].next = 1;

space.gif for(i=2; i<=10; i++){

space.gif j = language[0].next;
space.gif k = 0;

space.gif for( ; j != 0; k=j, j= language[j].next){
space.gif if(strcmp(language[j].name, language[i].name)>0)
space.gif break;
space.gif }

space.gif language[i].next = j;
space.gif language[k].next = i;
space.gif}
}