Sự tự tham chi ếu của cấu trúc trong C
Số trang: 30
Loại file: ppt
Dung lượng: 111.00 KB
Lượt xem: 17
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
List là 1 cấu trúc dữ liệu mà nó lưu giữ thông tintổng quát về vị trí của phần tử tiếp theo.Các phần tử của “single linked list ” chỉ có vị trítiếp theo.Trong C con trỏ được sử dụng để trỏ tới phần tửtiếp theo.Array(mảng): ta có thể truy nhập ở bất kì vị trínào trong mảng ngay lập tức.Linked list: ta có thể thay đổi số phần tử dữ liệucủa nó.
Nội dung trích xuất từ tài liệu:
Sự tự tham chi ếu của cấu trúc trong C Chủ đề Sự tự tham chiếu của cấu trúc trong C Cấu trúc dữ liệu danh sách liên kếtđơn (single linked list), danh sách liênkết đôi (double linked list):-Khởi tạo, thi hành.-Thuật toán quét dữ liệu-Thuật toán chèn, xoá.Sự tự tham chiếu của cấu trúc 1 hoặc nhiều thành phần của nó là con trỏ tới chính nó.struct list { char data; struct list *link;}; list item1, item2, item3; a b c item1.data=‘a’; item2.data=‘b’; item3.data=‘c’; item1.link=item2.link=item3.lik=NULL;Thi hành list trong C là 1 cấu trúc dữ liệu mà nó lưu giữ thông tin List tổng quát về vị trí của phần tử tiếp theo. Các phần tử của “single linked list ” chỉ có vị trí tiếp theo Trong C con trỏ được sử dụng để trỏ tới phần tử tiếp theo. Array(mảng): ta có thể truy nhập ở bất kì vị trí nào trong mảng ngay lập tức. Linked list: ta có thể thay đổi số phần tử dữ liệu của nó.Khai báo linked listtypedef ... elementtype;//kiểu dữ liệu phần tửtypedef struct node{ elementtype element; node* next;};node* root;node* cur;Hoặc:typedef ... elementtype;struct node{ elementtype element; struct node* next;};struct node* root;struct node* cur;Cấp phát bộ nhớ cho 1 phần tử cần cấp phát 1 khối bộ nhớ cho mỗi Ta node(phần tử) qua 1 con trỏ. struct node * new; new = (struct node*) malloc(sizeof(structnode));new->element = …new->next = null;• new->addr có nghĩa là (*new).addr.• “con trỏ biến cho bản ghi cấu trúc” ->”tên trường (field)”Exercise 3.1 thiết kế “address list”(danh sách địa Ta chỉ) cho các số điện thoại di động . Phải tạo 1 bản ghi cấu trúc gồm có name, phone number và email address. Phải tạo 1 chương trình có thể giải quyết với số lượng dữ liệu tuỳ ý.Exercise 3.1 (tiếp) Tạo 1 danh sách liên kết đơn chứa danh sách phone address. Viết 1 hàm insert 1 phần tử vào list ngay sau phần tử hiện thời, sử dụng nó để thêm node vào list Viết 1 hàm duyệt toàn bộ list và in ra thông tin chứa trong nó. Viết hàm xoá 1 node khỏi list.Gợi ý Bạn có thể tổ chức các phần tử và cấu trúc dữ liệu theo bản ghi cấu trúc AddressList sau.Bạn tự định nghĩa 1 cấu trúc (Address) để chứ thông tin về địa chỉ.struct AddressList { struct AddressList *next; struct Address addr;};Khai báo bản ghi cấu trúcstruct AddressList { struct AddressList *next; struct Address addr;}; biến con trỏ trỏ tới phần tử tiếp “next”: theo cũng có cùng cấu trúc AddressList. “addr”: là 1 địa chỉ3 thừa số quan trọng của 1 list đầu của list Root: NULL:giá trị của con trỏ.nó báo hiệu kết thúc của list. Cur: biến con trỏ lưu giữ phần tử hiện tại. CurRoot (head) NULL Link list : Insertion (chèn) ngay sau vị trí hiện tại: Chèn create new_item //phần tử mới cur->next = new; cur = cur->next; Cur …root New_itemLink list : Insertion Chèn ngay sau vị trí hiện tạinew = ( struct AddressList * ) malloc( sizeof(struct AddressList ) );new->addr = addr;new->next = NULL;if ( root == NULL ) {/* nếu không có phần tử nào */ root = new; cur = root;} else { cur->next = new; cur = cur->next;}} Link list : Insertion vào trước vị trí hiện tại: Chèn cur prev …root New_itemDuyệt 1 list for ( cur = root; cur != NULL; cur = cur- >next ) {showAddress( cur->addr, stdout );}//showAddress là hàm in ra dữ liệu (tự viết)Duyệt 1 list đổi giá trị của biến con trỏ cur trong Thay dãy Các biến này được gọi là “biến lặp” Hoàn thành duyệt khi giá trị cur = NULLDeletion (xoá) xoá phần tử đầu tiên: Khidel=root;root = del->next; free(del); Khi xoá phần tử đầu tiên, ta chuyển con trỏ root tới vị trí next được chỉ ra bởi del.Xoá phần tử ở giữa node đang được trỏ bởi cur. Xoá Xác định prev là con trỏ tới node ngay trước node cần xoá. Sau đó thực hiện:prev->next = cur->next;free(cur);Exercise 3.2 Tạo hàm insert, delete với tham số n (nguyên) chỉ ra vị trí của node bị tác động đến. Vị trí đầu tiên là 0- n = 1: thêm phần tử vào sau phần tử đầu tiên.- n = 2: thêm phần tử vào sau phần tử thứ 2.-struct AddressList *insert (struct AddressList*root, struct Address ad, int n);struct AddressList *delete(struct AddressList*root, int n);Giải phóng listto_free = root ;//to_free là biến lặp lưu vị trí node ta giải phóngwhile (to_free != NULL){ root = root->next; free(to_free); to_free = root;}Exercise 3.3 dựng 1 chương trình quản lí sinh viên đơn Xây giản sử dụng linked list gồm node có cấu trúc như sau:typedef struct Student_t { char id[ID_LENGTH]; char name[NAME_LENGTH]; int grade; struct Student_t *next;} Student; ...
Nội dung trích xuất từ tài liệu:
Sự tự tham chi ếu của cấu trúc trong C Chủ đề Sự tự tham chiếu của cấu trúc trong C Cấu trúc dữ liệu danh sách liên kếtđơn (single linked list), danh sách liênkết đôi (double linked list):-Khởi tạo, thi hành.-Thuật toán quét dữ liệu-Thuật toán chèn, xoá.Sự tự tham chiếu của cấu trúc 1 hoặc nhiều thành phần của nó là con trỏ tới chính nó.struct list { char data; struct list *link;}; list item1, item2, item3; a b c item1.data=‘a’; item2.data=‘b’; item3.data=‘c’; item1.link=item2.link=item3.lik=NULL;Thi hành list trong C là 1 cấu trúc dữ liệu mà nó lưu giữ thông tin List tổng quát về vị trí của phần tử tiếp theo. Các phần tử của “single linked list ” chỉ có vị trí tiếp theo Trong C con trỏ được sử dụng để trỏ tới phần tử tiếp theo. Array(mảng): ta có thể truy nhập ở bất kì vị trí nào trong mảng ngay lập tức. Linked list: ta có thể thay đổi số phần tử dữ liệu của nó.Khai báo linked listtypedef ... elementtype;//kiểu dữ liệu phần tửtypedef struct node{ elementtype element; node* next;};node* root;node* cur;Hoặc:typedef ... elementtype;struct node{ elementtype element; struct node* next;};struct node* root;struct node* cur;Cấp phát bộ nhớ cho 1 phần tử cần cấp phát 1 khối bộ nhớ cho mỗi Ta node(phần tử) qua 1 con trỏ. struct node * new; new = (struct node*) malloc(sizeof(structnode));new->element = …new->next = null;• new->addr có nghĩa là (*new).addr.• “con trỏ biến cho bản ghi cấu trúc” ->”tên trường (field)”Exercise 3.1 thiết kế “address list”(danh sách địa Ta chỉ) cho các số điện thoại di động . Phải tạo 1 bản ghi cấu trúc gồm có name, phone number và email address. Phải tạo 1 chương trình có thể giải quyết với số lượng dữ liệu tuỳ ý.Exercise 3.1 (tiếp) Tạo 1 danh sách liên kết đơn chứa danh sách phone address. Viết 1 hàm insert 1 phần tử vào list ngay sau phần tử hiện thời, sử dụng nó để thêm node vào list Viết 1 hàm duyệt toàn bộ list và in ra thông tin chứa trong nó. Viết hàm xoá 1 node khỏi list.Gợi ý Bạn có thể tổ chức các phần tử và cấu trúc dữ liệu theo bản ghi cấu trúc AddressList sau.Bạn tự định nghĩa 1 cấu trúc (Address) để chứ thông tin về địa chỉ.struct AddressList { struct AddressList *next; struct Address addr;};Khai báo bản ghi cấu trúcstruct AddressList { struct AddressList *next; struct Address addr;}; biến con trỏ trỏ tới phần tử tiếp “next”: theo cũng có cùng cấu trúc AddressList. “addr”: là 1 địa chỉ3 thừa số quan trọng của 1 list đầu của list Root: NULL:giá trị của con trỏ.nó báo hiệu kết thúc của list. Cur: biến con trỏ lưu giữ phần tử hiện tại. CurRoot (head) NULL Link list : Insertion (chèn) ngay sau vị trí hiện tại: Chèn create new_item //phần tử mới cur->next = new; cur = cur->next; Cur …root New_itemLink list : Insertion Chèn ngay sau vị trí hiện tạinew = ( struct AddressList * ) malloc( sizeof(struct AddressList ) );new->addr = addr;new->next = NULL;if ( root == NULL ) {/* nếu không có phần tử nào */ root = new; cur = root;} else { cur->next = new; cur = cur->next;}} Link list : Insertion vào trước vị trí hiện tại: Chèn cur prev …root New_itemDuyệt 1 list for ( cur = root; cur != NULL; cur = cur- >next ) {showAddress( cur->addr, stdout );}//showAddress là hàm in ra dữ liệu (tự viết)Duyệt 1 list đổi giá trị của biến con trỏ cur trong Thay dãy Các biến này được gọi là “biến lặp” Hoàn thành duyệt khi giá trị cur = NULLDeletion (xoá) xoá phần tử đầu tiên: Khidel=root;root = del->next; free(del); Khi xoá phần tử đầu tiên, ta chuyển con trỏ root tới vị trí next được chỉ ra bởi del.Xoá phần tử ở giữa node đang được trỏ bởi cur. Xoá Xác định prev là con trỏ tới node ngay trước node cần xoá. Sau đó thực hiện:prev->next = cur->next;free(cur);Exercise 3.2 Tạo hàm insert, delete với tham số n (nguyên) chỉ ra vị trí của node bị tác động đến. Vị trí đầu tiên là 0- n = 1: thêm phần tử vào sau phần tử đầu tiên.- n = 2: thêm phần tử vào sau phần tử thứ 2.-struct AddressList *insert (struct AddressList*root, struct Address ad, int n);struct AddressList *delete(struct AddressList*root, int n);Giải phóng listto_free = root ;//to_free là biến lặp lưu vị trí node ta giải phóngwhile (to_free != NULL){ root = root->next; free(to_free); to_free = root;}Exercise 3.3 dựng 1 chương trình quản lí sinh viên đơn Xây giản sử dụng linked list gồm node có cấu trúc như sau:typedef struct Student_t { char id[ID_LENGTH]; char name[NAME_LENGTH]; int grade; struct Student_t *next;} Student; ...
Tìm kiếm theo từ khóa liên quan:
cấu trúc dữ liệu thuật toán bài giảng cấu trúc dữ liệu tài liệu cấu trúc dữ liệu giáo trình cấu trúc dữ liệu thuật toán trong cấu trúc dữ liệuGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 317 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 161 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
57 trang 132 1 0
-
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 123 0 0 -
150 trang 104 0 0
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Một số mô hình thuật toán
42 trang 74 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0