Structures
Structures
Data structures
Struktur data merupakan kumpulan berbagai tipe data yang memiliki ukuran yang berbeda di kelompokan dalam satu deklarasi unik, dengan format sbb :
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional object_name merupakan identifier yang valid untuk objek sturktur. Diantara kurung kurawal { } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh :
struct products {
char name [30];
float price;
} ;
products apple;
products orange, melon;
Didefinisikan model struktur products dengan dua field : name dan price, dengan tipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikan tiga objek : apple, orange dan melon.
Ketika dideklarasikan, products menjadi tnama tipe yang valid seperti tipe dasar int, char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optional field yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsung mendeklarasikan object dari tipe struktur. Contoh :
struct products {
char name [30];
float price;
} apple, orange, melon;
Sangat penting untuk membedakan antara structure model, dan structure object. model adalah type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu model (type).
Contoh :
// example about structures
#include
#include
#include
struct movies_t {
char title [50];
int year;
} mine, yours;
void printmovie (movies_t movie);
int main ()
{
char buffer [50];
strcpy (mine.title, "2001 A Space Odyssey");
mine.year = 1968;
cout << "Enter title: ";
cin.getline (yours.title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
yours.year = atoi (buffer);
cout << "My favourite movie is:\n ";
printmovie (mine);
cout << "And yours:\n ";
printmovie (yours);
return 0;
}
void printmovie (movies_t movie)
{
cout <<>
cout << " (" <<>
}
Output :
Enter title: Alien
Enter year: 1979
My favourite movie is:
2001 A Space Odyssey (1968)
And yours:
Alien (1979)
Contoh diatas menjelaskan bagaimana menggunakan elemen dari struktur dan struktur itu sendiri sebagai variable normal. Contoh, yours.year merupakan variable valid dengan tipe int, dan mine.title merupakan array valid dari 50 chars.
Perhatikan mine dan yours juga berlaku sebagai valid variable dari tipe movies_t ketika di-pass ke-function printmovie(). Salah satu keuntungan dari structures yaitu kita dapat mengacu pada setiap elemennya atau keseluruhan blok struktur.
Contoh :
// array of structures
#include
#include
#define N_MOVIES 5
struct movies_t {
char title [50];
int year;
} films [N_MOVIES];
void printmovie (movies_t movie);
int main ()
{
char buffer [50];
int n;
for (n=0; n
{
cout << "Enter title: ";
cin.getline (films[n].title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
films[n].year = atoi (buffer);
}
cout << "\nYou have entered these movies:\n";
for (n=0; n
printmovie (films[n]);
return 0;
}
void printmovie (movies_t movie)
{
cout <<>
cout << " (" <<>
}
Output :
Enter title: Alien
Enter year: 1979
Enter title: Blade Runner
Enter year: 1982
Enter title: Matrix
Enter year: 1999
Enter title: Rear Window
Enter year: 1954
Enter title: Taxi Driver
Enter year: 1975
You have entered these movies:
Alien (1979)
Blade Runner (1982)
Matrix (1999)
Rear Window (1954)
Taxi Driver (1975)
Pointer to structure
Sama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya sama untuk setiap tipe data. Pointer harus dideklarasikan sebagai pointer untuk struktur :
struct movies_t {
char title [50];
int year;
};
movies_t amovie;
movies_t * pmovie;
amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untuk menunjuk ke objek dari tipe struct movies_t. maka, deklarasi dibawah ini juga benar :
pmovie = &amovie;
Contoh :
// pointers to structures
#include
#include
struct movies_t {
char title [50];
int year;
};
int main ()
{
char buffer[50];
movies_t amovie;
movies_t * pmovie;
pmovie = & amovie;
cout << "Enter title: ";
cin.getline (pmovie->title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
pmovie->year = atoi (buffer);
cout << "\nYou have entered:\n";
cout <<>title;
cout << " (" <<>year << ")\n";
return 0;
}
Output :
Enter title: Matrix
Enter year: 1999
You have entered:
Matrix (1999)
Operator -> merupakan operator penunjuk yang digunakan secara khusus bersama dengan pointer untuk struktur dan pointer untuk class. Memungkinkan kita untuk tidak menggunakan tanda kurung pada setiap anggota struktur yang ditunjuk. Dalam contoh digunakan :
pmovie->title
Atau dalam penulisan yang lain :
(*pmovie).title
Kedua ekspresi tersebut diatas : pmovie->title dan (*pmovie).title benar dan berarti evaluasi elemen title dari struktur yang ditunjuk (pointed by) pmovie. Harus dibedakan dari :
*pmovie.title
Yang ekuivalen dengan :
*(pmovie.title)
Dibawah ini merupaka tabel rangkuman, kombinasi yang mungkin terjadi antara pointer dan struktur :
Expression | Description | Equivalent |
pmovie.title | Element title of structure pmovie |
|
pmovie->title | Element title of structure pointed by pmovie | (*pmovie).title |
*pmovie.title | Value pointed by element title of structure pmovie | *(pmovie.title) |
Nesting structures
Struture juga dapat berbentuk nested (bersarang) sehingga suatu elemen dari suatu struktur dapat menjadi elemen pada struktur yang lain :
struct movies_t {
char title [50];
int year;
}
struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;
friends_t * pfriends = &charlie;
Setelah deklarasi diatas, dapat digunakan ekspresi sbb :
charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends->favourite_movie.year
(Dimana 2 ekspresi terakhir ekuivalen)

