Cấu trúc dữ liệu trong C

Trong các bài học C++ chúng ta đã cùng tìm hiểu về Input và Output trong C++ là gì. Trong bài học C++ hôm nay, Taimienphi.vn sẽ giới thiệu tiếp cho bạn về cấu trúc dữ liệu trong C++.

Các bài viết trước đây Taimienphi.vn đã giới thiệu cho bạn về các kiểu dữ liệu trong C++, bài viết tiếp theo dưới đây Taimienphi.vn sẽ giới thiệu cho bạn về cấu trúc dữ liệu trong C++ là gì.

cau truc du lieu trong c

Mục Lục bài viết:

1. Cấu trúc dữ liệu trong C++

2. Con trỏ trong cấu trúc

3. Cấu trúc lồng

 

1. Cấu trúc dữ liệu trong C++

Cấu trúc dữ liệu là một nhóm các phần tử dữ liệu được nhóm lại với nhau trong một tên. Các phần tử dữ liệu này còn được gọi là các thành viên, có thể là các kiểu dữ liệu khác nhau và độ dài khác nhau.

Trong C++, cấu trúc dữ liệu có thể được khai báo bằng cách sử dụng cú pháp dưới đây:

struct type_name {

member_type1 member_name1;

member_type2 member_name2;

member_type3 member_name3;

.

.

} object_names;

Trong đó type_name là tên của kiểu cấu trúc, object_name có thể là tập hợp các định danh hợp lệ cho các đối tượng có kiểu cấu trúc này. Trong dấu ngoặc {} là danh sách các dữ liệu thành viên, mỗi danh sách được chỉ định một kiểu dữ liệu và một định danh hợp lệ làm tên.

Cho ví dụ về cấu trúc dữ liệu trong C++:

struct sản phẩm {

int trọng lượng;

double giá bán;

} ;

Sản phẩm táo;

Sản phẩm chuối, dưa hấu;

Ví dụ trên khai báo kiểu cấu trúc có tên gọi là sản phẩm, và định nghĩa nó bao gồm 2 thành viên: trọng lượng và giá bán. Khai báo nào tạo ra kiểu cấu trúc mới (tức sản phẩm), được sử dụng để khai báo 3 đối tượng (biến), bao gồm táo, chuối và dưa hấu. Cần lưu ý, sau khi sản phẩm được khai báo, nó được sử dụng như các kiểu dữ liệu khác.

Ở phần cuối định nghĩa cấu trúc và trước dấu chấm phẩy (;) kết thúc, chúng ta có thể sử dụng trường object_names để khai báo trực tiếp các đối tượng của kiểu cấu trúc.

Ví dụ cấu trúc của các đối tượng táo, chuối và dưa hấu có thể được khai báo tại thời điểm kiểu cấu trúc dữ liệu được định nghĩa:

struct sản phẩm {

int trọng lượng;

double giá bán;

} táo, chuối, dưa hấu;

Trong ví dụ trên, object_names được chỉ định, type_name (tức sản phẩm) là tùy chọn: struct yêu cầu một type_name hoặc ít nhất một tên trong object_names, nhưng không nhất thiết phải là cả hai.

Lưu ý quan trọng là phải phân biệt rõ giữa cấu trúc type _name (sản phẩm) và đối tượng (táo, chuối và dưa hấu) là gì. Nhiều đối tượng (như táo, chuối và dưa hấu) có thể được khai báo từ một kiểu cấu trúc (sản phẩm).

Khi 3 đối tượng của kiểu cấu trúc được định nghĩa (táo, chuối và dưa hấu), các thành viên của nó có thể được truy cập trực tiếp. Rất đơn giản, chúng ta chỉ cần chèn thêm dấu chấm (.) giữa các đối tượng và tên thành viên.

Ví dụ:

táo.trọng lượng

táo.giá bán

chuối.trọng lượng

chuối.giá bán

dưa hấu.trọng lượng

dưa hấu.giá bán

Mỗi một đối tượng này có kiểu dữ liệu tương ứng với thành viên mà nó đề cập đến: táo.trọng lượng, chuối.trọng lượng và dưa hấu.trọng lượng thuộc kiểu dữ liệu int, còn táo.giá bán, chuối.giá bán, dưa hấu.giá bán thuộc kiểu double.

Dưới đây là ví dụ về kiểu cấu trúc đang hoạt động:

// ví dụ về cấu trúc

#include

#include

#include

sử dụng namespace std

struct trang web_t {

string tên;

int năm;

} mine, yours;

void printtrangweb (trangweb_t trangweb);

int main ()

{

string mystr;

mine.title = "Taimienphi.vn";

mine.year = 2018;

cout < "nhập="" tên:="">

getline (cin,yours. title);

cout < "nhập="" năm:="">

getline (cin,mystr);

stringstream(mystr) >> yours.year;

cout < "trang="" web="" yêu="" thích="" của="" tôi="" là:\n="">

printtrangweb (mine);

cout < "và="" bạn="" là:\n="">

printtrangweb (yours);

trả về 0;

}

void printtrangweb (trangweb_t trangweb)

{

cout <>

cout < "="" ("="">< movie.year=""><>

}

Đầu ra có dạng:

Nhập tên: 9mobi.vn

Nhập năm: 2018

Trang web yêu thích của tôi là: Taimienphi.vn (2018)

Và trang web của bạn là: 9mobi.vn (2018)

Trong ví dụ trên, các thành viên của đối tượng hoạt động như các biến thông thường. Ví dụ, thành viên yours.year là biến hợp lệ kiểu int và mine.title là biến hợp kệ kiểu chuỗi (string).

Ngoài ra các đối tượng mine và your cũng là các biến cùng kiểu (thuộc kiểu movies_t).

Cả 2 đều được truyền cho hàm printtrangweb như các biến đơn giản. Vì vậy một trong những tính năng của cấu trúc dữ liệu là khả năng đề cập đến cả 2 thành viên hoặc toàn bộ cấu trúc. Trong cả hai trường hợp sử dụng cùng một định danh: tên của cấu trúc.

Vì cấu trúc là các kiểu, chúng cũng có thể được sử dụng làm kiểu mảng để xây dựng bảng hoặc cơ sở dữ liệu:

/ array of structures

#include

#include

#include

sử dụng namespace std;

struct movies_t {

string tiêu đề;

int năm;

} films [3];

void printmovie (movies_t movie);

int main ()

{

string mystr;

int n;

for (n=0; n<3;>

{

cout < "nhập="" tiêu="" đề:="">

getline (cin,films[n].title);

cout < "nhập="" năm:="">

getline (cin,mystr);

stringstream(mystr) >> films[n].year;

}

cout < "\nnhập="" các="" bộ="" phim="" của="">

for (n=0; n<3;>{C}{C}

printmovie (films[n]);

trả về 0;

}

void printmovie (movies_t movie)

{

cout <>

cout < "="" ("="">< movie.year=""><>

}

Đầu ra:

Nhập tiêu đề: Kong

Nhập năm: 2017

Nhập tiêu đề: The Myth

Nhập năm: 2010

Nhập tiêu đề: Spider Man

Nhập năm: 2018

Nhập các bộ phim của bạn:

Kong (2017)

The Myth (2010)

Spider Man (2018)

 

2. Con trỏ trong cấu trúc

Cấu trúc cũng có thể được trỏ đến bằng con trỏ của riêng nó:

struct phim_t {

string tiêu đề;

int năm;

};

phim_t amovie;

phim_t * pmovie;

Trong đó amovie là đối tượng của kiểu cấu trúc phim_t, và pmovie là con trỏ trỏ đến các đối tượng của kiểu cấu trúc phim_t. Vì vậy đoạn mã dưới đây cũng sẽ hợp lệ:

pmovie = &amovie;

Giá trị của con trỏ pmovie sẽ được gán làm địa chỉ của đối tượng amovie.

Dưới đây là ví dụ khác minh họa con trỏ trong cấu trúc, sử dụng toán tử mũi tên (->):

// con trỏ trong cấu trúc

#include

#include

#include

sử dụng namespace std;

struct movies_t {

string tiêu đề;

int năm;

};

int main ()

{

string mystr;

movies_t amovie;

movies_t * pmovie;

pmovie = &amovie;

cout < "nhập="" tiêu="" đề:="">

getline (cin, pmovie->title);

cout < "nhập="" năm,:="">

getline (cin, mystr);

(stringstream) mystr >> pmovie->năm;

cout < "\nnhập="" phim="" của="" bạn="">

cout < pmovie-="">tiêu đề;

cout < "="" ("="">< pmovie-="">năm <>

trả về 0;

}

Đầu ra:

Nhập tiêu đề: Thor

Nhập năm: 2018

Nhập phim của bạn: Thor (2018)

Toán tử (->) là toán tử trỏ đến, được sử dụng riêng với các con trỏ tới các đối tượng có thành viên. Toán tử này được sử dụng để truy cập thành viên của một đối tượng trực tiếp từ địa chỉ của nó.

Chẳng hạn như trong ví dụ trên:

pmovie->tiêu đề

Tương đương với:

(*pmovie).tiêu đề

Cả 2 biểu thức, pmovie->tiêu đề và (*pmovie).tiêu đề đều là hợp lệ, và cả 2 đều truy cập tiêu đề thành viên của cấu trúc dữ liệu được trỏ bởi con trỏ có tên là pmovie.

*pmovie.tiêu đề

Tương đương:

*(pmovie.tiêu đề)

Các biểu thức trên sẽ truy cập giá trị được trỏ bởi thành viên con trỏ giả định có tên là tiêu đề của đối tượng cấu trúc pmovie (không viết hoa vì tiêu đề không phải là con trỏ).

Bảng dưới đây mô tả các cách kết hợp toán tử cho con trỏ và các thành viên cấu trúc:

cau truc du lieu trong c

Biểu thức Mô tả Tương đương

a.b Thành viên b của đối tượng a

a->b Thành viên b của đối tượng được trỏ (*a).b

*a.b Giá trị được trỏ bởi thành viên b của đối tượng a *(a.b)

 

3. Cấu trúc lồng

Ngoài ra các cấu trúc cũng có thể lồng nhau, giống như cách một phần tử của cấu trúc có thể lồng trong cấu trúc khác.

Ví dụ:

struct phim_t {

string tiêu đề;

int năm;

};

struct bạn bè_t {

string tên;

string email;

phim_t yêu thích_phim;

} charlie, maria;

bạn bè_t * pbạn bè = &charlie;

Tương tự, tất cả các biểu thức dưới đây cũng hợp lệ:

charlie.tên

maria.yêu thích_phim.tiêu đề

charlie. yêu thích_phim.năm

pbạn bè->yêu thích_ phim.năm

Bằng cách này, 2 biểu thức cuối cùng đề cập đến cùng một thành viên.

Bài viết trên đây bạn đọc đã cùng Taimienphi.vn tìm hiểu về cấu trúc dữ liệu trong C++ là gì. Hy vọng bài viết trên đây đã cung cấp cho bạn các thông tin hữu ích về ngôn ngữ lập trình C++. Mọi ý kiến, đóng góp bạn đọc có thể để lại trong phần bình luận bên dưới bài viết.

https://thuthuat.taimienphi.vn/cau-truc-du-lieu-trong-c-45800n.aspx
Ngoài ra, Input Và Output trong C++ cũng là nội dung cần được quan tâm để phục vụ cho công việc lập trình, Input Và Output trong C sẽ có các ví dụ minh họa và phân tích chi tiết.

Tác giả: Quỳnh Búp Bê     (4.0★- 3 đánh giá)  ĐG của bạn?

  

Bài viết liên quan

Con trỏ (pointer) trong C
Date và Time trong C
Phạm vi biến trong C
Lệnh điều kiện trong C
Mảng (array) trong C (phần 4)
Từ khoá liên quan:

Cấu trúc dữ liệu trong C++

, C++, học C++,

SOFT LIÊN QUAN
  • Dev C++

    Trình biên dịch C, C++ đa tính năng

    Bloodshed Dev-C++ là IDE (môi trường phát triển hợp nhất) chuyên dụng cho ngôn ngữ lập trình C hoặc C++ hỗ trợ đầy đủ các chức năng từ việc soạn thảo văn bản đến viết các chương trình cho DOS và hệ điều hành giúp người d ...

Tin Mới