Danh mục

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    
Thư viện của tui

Phí tải xuống: 19,000 VND Tải xuống file đầy đủ (30 trang) 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ạinew = ( 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ài liệu được xem nhiều: