アルゴリズムとデータ構造 補足資料7-1 「メモリでの『構造体の配列』」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志
struct item{ int key; char name[7]; } ; main() { x x.key アドレス(32bit) 中身(1記憶単位は8bit) … 0x 40ea 0800 1101 0000 0x 40ea 0801 0000 0111 0x 40ea 0802 0000 0000 0x 40ea 0803 0x 40ea 0804 0000 0110 0x 40ea 0805 0x 40ea 0806 0101 1001 0x 40ea 0807 0100 1110 0x 40ea 0808 0101 0101 0x 40ea 0809 0x 40ea 080a 0100 0001 0x 40ea 080b 0x 40ea 080c 0100 1100 0x 40ea 080d 0110 1111 0x 40ea 080e 1010 0111 0x 40ea 080f 0101 0000 0x 40ea 0810 0x 40ea 0811 0x 40ea 0812 0100 1011 0x 40ea 0813 1101 0100 0x 40ea 0814 0x 40ea 0815 0x 40ea 0816 struct item{ int key; char name[7]; } ; main() { struct item x; x.key = 1536; x.name[0]=‘Y’; x.name[1]=‘N’; x.name[2]=‘U’; x.name[3]=‘\0’; … } x x.key x.name x.name[0] x.name[1] x.name[2] x.name[3] x.name[4] x.name[5] x.name[7]
struct item{ int key; char name[7]; } ; main() { x x.key struct item x; x.key = 1536; x.name[0]=‘Y’; x.name[1]=‘N’; x.name[2]=‘U’; x.name[3]=‘\0’; … } x x.key x.name x.name[0] x.name[1] x.name[2] x.name[3] x.name[4] x.name[5] x.name[7]
struct item{ int key; char name[7]; } ; main() { x struct item x; x.key = 1536; x.name[0]=‘Y’; x.name[1]=‘N’; x.name[2]=‘U’; x.name[3]=‘\0’; … } x x.key 1536 x.name x.name[0] Y x.name[1] N x.name[2] U \0 x.name[3] x.name[4] x.name[5] x.name[7]
struct item{ int key; char name[7]; } ; main() { struct item x; x.key = 1536; x.name[0]=‘Y’; x.name[1]=‘N’; x.name[2]=‘U’; x.name[3]=‘\0’; … } x x.key 1536 x.name YNU
struct item{ int key; char name[7]; } ; main() { struct item a[5]; アドレス(32bit) 中身(1記憶単位は8bit) … 0x 40ea 0800 1101 0000 0x 40ea 0801 0000 0111 0x 40ea 0802 0000 0000 0x 40ea 0803 0x 40ea 0804 0000 0110 0x 40ea 0805 0x 40ea 0806 0101 1001 0x 40ea 0807 0100 1110 0x 40ea 0808 0101 0101 0x 40ea 0809 0x 40ea 080a 0100 0001 0x 40ea 080b 0x 40ea 080c 0100 1100 0x 40ea 080d 0x 40ea 080e 0x 40ea 080f 0000 0001 0x 40ea 0810 0x 40ea 0811 0100 1101 0x 40ea 0812 0100 1001 0x 40ea 0813 0101 0100 0x 40ea 0814 0x 40ea 0815 0101 0000 0x 40ea 0816 0100 1011 struct item{ int key; char name[7]; } ; main() { struct item a[5]; a[0].key = 1536; a[0].name[0]=‘Y’; a[0].name[1]=‘N’; a[0].name[2]=‘U’; a[0].name[3]=‘\0’; a[1].key = 256; a[1].name[0]=‘M’; a[1].name[1]=‘I’; a[1].name[2]=‘T’; a[1].name[3]=‘\0’; … } a[0] a[0].key a[0].name a[0].name[0] a[0]. name[1] a[0]. name[2] a[0]. name[3] a[0]. name[4] a[0]. name[5] a[0]. name[7] a[1] a[1].key a[1].name a[1].name[0] a[1]. name[1] a[1]. name[2] a[1]. name[3] a[1]. name[4] a[1]. name[5] a[1]. name[7]
struct item{ int key; char name[7]; } ; main() { struct item a[5]; a[0].key = 1536; a[0].name[0]=‘Y’; a[0].name[1]=‘N’; a[0].name[2]=‘U’; a[0].name[3]=‘\0’; a[1].key = 256; a[1].name[0]=‘M’; a[1].name[1]=‘I’; a[1].name[2]=‘T’; a[1].name[3]=‘\0’; … } a[0] a[0].key 1536 a[0]. name YNU a[1] a[1].key 256 a[1]. name MIT a[2] a[2].key 2049 a[2]. name UCLA a[3] a[3].key 87 a[3]. name TU/e a[4] a[4].key 1562 a[4]. name BYU
a[0] a[0] a[0].key 1536 a[0].key 87 a[0]. name YNU a[0]. name TU/e a[1] a[1] a[1].key 256 a[1].key 256 a[1]. name MIT a[1]. name MIT a[2] a[2] a[2].key 2049 a[2].key 1536 sort(a,5) a[2]. name UCLA a[2]. name YNU a[3] a[3] a[3].key 87 a[3].key 1562 a[3]. name TU/e a[3]. name BYU a[4] a[4] a[4].key 1562 a[4].key 2049 a[4]. name BYU a[4]. name UCLA 整列(sort)前 整列(sort)後
a[0] a[1] a[2] a[3] a[4] a[0].key 1536 a[1].key 256 a[2].key 2049 a[3].key 87 a[4].key 1562 a[0]. name YNU a[1]. name MIT a[2]. name UCLA a[3]. name TU/e a[4]. name BYU sort(a,5) a[0] a[1] a[2] a[3] a[4] a[0].key 87 a[1].key 256 a[2].key 1536 a[3].key 1562 a[4].key 2049 a[0]. name TU/e a[1]. name MIT a[2]. name YNU a[3]. name BYU a[4]. name UCLA