Sự tự tham chi ếu của cấu trúc trong C

Đăng ngày | Thể loại: | Lần tải: 0 | Lần xem: 0 | Page: 30 | FileSize: 0.11 M | File type: PPT
of x

Sự tự tham chi ếu của cấu trúc trong C. List là 1 cấu trúc dữ liệu mà nó lưu giữ thông tin 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ó.. Cũng như các tài liệu khác được thành viên chia sẽ hoặc do tìm kiếm lại và giới thiệu lại cho các bạn với mục đích nghiên cứu , chúng tôi không thu tiền từ thành viên ,nếu phát hiện tài liệu phi phạm bản quyền hoặc vi phạm pháp luật xin thông báo cho website ,Ngoài tài liệu này, bạn có thể download bài giảng miễn phí phục vụ nghiên cứu Một số tài liệu download thiếu font chữ không hiển thị đúng, thì do máy tính bạn không hỗ trợ font củ, bạn download các font .vntime củ về cài sẽ xem được.

https://tailieumienphi.vn/doc/su-tu-tham-chi-eu-cua-cau-truc-trong-c-qdg2tq.html

Nội dung


  1. 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ên kế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á.
  2. 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;
  3. 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ó.
  4. Khai báo linked list typedef ... 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;
  5. 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)”
  6. 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ỳ ý.
  7. 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.
  8. 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; };
  9. Khai báo bản ghi cấu trúc struct 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ỉ
  10. 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. Cur Root (head) NULL
  11. 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_item
  12. Link 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; } }
  13. Link list : Insertion vào trước vị trí hiện tại:  Chèn cur prev … root New_item
  14. Duyệ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)
  15. 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 = NULL
  16. Deletion (xoá) xoá phần tử đầu tiên:  Khi del=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.
  17. 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);
  18. 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);
  19. Giải phóng list to_free = root ;//to_free là biến lặp lưu vị trí node ta giải phóng while (to_free != NULL) { root = root->next; free(to_free); to_free = root; }
  20. 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;
685788

Tài liệu liên quan


Xem thêm