Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
548,42 KB
Nội dung
Khoa CNTT KTLT Chương CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN Trần Quốc Vinh Khoa CNTT KTLT HÌNH ẢNH DANH SÁCH LIÊN KẾT ĐƠN Trần Quốc Vinh Click to see Figure 1-2 Khoa CNTT KTLT CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN NODEPTR NODE Trần Quốc Vinh Khoa CNTT KTLT CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN Cấu trúc liệu struct node { KDL info; struct node*pNext; }; typedef struct node NODE; typedef NODE* NODEPTR; NODEPTR NODE Trần Quốc Vinh Khoa CNTT KTLT CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN dụ 1: Hãy khai báo CTDL cho dslk đơn số nguyên Ví 1.struct node 2.{ int info; struct node*pNext; 5.}; 6.typedef struct node NODE; 7.typedef NODE*NODEPTR; Trần Quốc Vinh Khoa CNTT KTLT CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN dụ 2: Hãy khai báo CTDL cho dslk đơn số thực Ví 1.struct node 2.{ float info; struct node*pNext; 5.}; 6.typedef struct node NODE; 7.typedef NODE *NODEPTR; Trần Quốc Vinh Khoa CNTT KTLT CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT ĐƠN dụ 3: Hãy khai báo ctdl cho dslk đơn phân số 11.struct phanso 12.{ 13 int tu; 14 int mau; 15.}; 16.typedef struct phanso PHANSO; 17.struct node 18.{ 19 PHANSO info; 20 struct node*pNext; 21.}; 22.typedef struct node NODE; 23.typedef NODE * NODEPTR; Ví Trần Quốc Vinh Khoa CNTT KTLT KHỞI TẠO DANH SÁCH LIÊN KẾT ĐƠN Khái niệm: Khởi tạo danh sách liên kết đơn tạo danh sách rỗng không chứa node hết Định nghĩa hàm void Init(NODEPTR &ptr) { ptr = NULL; } Trần Quốc Vinh Khoa CNTT KTLT KIỂM TRA DANH SÁCH LIÊN KẾT ĐƠN RỖNG Khái niệm: Kiểm tra danh sách liên kết đơn rỗng hàm trả giá trị danh sách rỗng Trong tình danh sách không rỗng hàm trả giá trị Định nghĩa hàm int IsEmpty(NODEPTR ptr) { if (ptr==NULL) return 1; return 0; } Trần Quốc Vinh Khoa CNTT KTLT KIỂM TRA DANH SÁCH LIÊN KẾT ĐƠN RỖNG Khái niệm: Kiểm tra danh sách liên kết đơn rỗng hàm trả giá trị danh sách rỗng Trong tình danh sách không rỗng hàm trả giá trị Định nghĩa hàm int IsEmpty(NODEPTR ptr) { return(ptr==NULL); } Trần Quốc Vinh 10 Khoa CNTT KTLT TẠO NODE CHO DANH SÁCH LIÊN KẾT ĐƠN Khái niệm: Tạo node cho danh sách liên kết đơn xin cấp phát nhớ có kích thước với kích thước kiểu liệu NODE để chứa thông tin biết trước Định nghĩa hàm trừu tượng NODE* GetNode(KDL x) { NODE *p=new NODE; if (p==NULL) return NULL; p->info = x; p->pNext = NULL; return p; } Trần Quốc Vinh 11 Khoa CNTT KTLT TẠO NODE CHO DANH SÁCH LIÊN KẾT ĐƠN Ví dụ 1: Định nghĩa hàm tạo NODE cho dslk đơn số thực để chứa thông tin biết trước Định nghĩa hàm NODE* GetNode(float x) { NODE *p = new NODE; if (p==NULL) return NULL; p->info = x; p->pNext = NULL; return p; } Trần Quốc Vinh 12 Khoa CNTT KTLT TẠO NODE CHO DANH SÁCH LIÊN KẾT ĐƠN Ví dụ 2: Định nghĩa hàm tạo NODE cho dslk đơn phân số để chứa thông tin biết trước Định nghĩa hàm NODE* GetNode(PHANSO x) { NODE *p=new NODE; if (p==NULL) return NULL; p->info = x; p->pNext = NULL; return p; } Trần Quốc Vinh 13 Khoa CNTT KTLT THÊM MỘT NODE VÀO ĐẦU DANH SÁCH LIÊN KẾT ĐƠN • Khái niệm: Thêm node vào đầu danh sách liên kết đơn gắn node vào đầu danh sách ptr p Trần Quốc Vinh 14 Khoa CNTT KTLT THÊM MỘT NODE VÀO ĐẦU DANH SÁCH LIÊN KẾT ĐƠN Khái niệm: Thêm node vào đầu danh sách liên kết đơn gắn node vào đầu danh sách Định nghĩa hàm: void AddHead(NODEPTR &ptr, NODE*p) { p->pNext = ptr; ptr = p; } Trần Quốc Vinh 15 Khoa CNTT KTLT NHẬP TỪ BÀN PHÍM DANH SÁCH LIÊN KẾT ĐƠN Khái niệm: Nhập từ bàn phím dslk đơn nhập thông tin node danh sách Định nghĩa hàm trừu tượng 11.void Input(NODEPTR &ptr) 12.{ 13 int n; 14 printf(“Nhap n: ”); 15 scanf(“%d”,&n); 16 Init(ptr); 17 for(int i=1;iinfo; p=p->pNext; 10 } 11 return s; 12.} Trần Quốc Vinh 20 Khoa CNTT KTLT DUYỆT TUẦN TỰ DANH SÁCH LIÊN KẾT ĐƠN Ví dụ 2: Định nghĩa hàm xuất dslk đơn số nguyên Định nghĩa hàm void Xuat(NODEPTR ptr) { NODE * p = ptr; while(p!=NULL) { printf(“%4d”,p->info); p=p->pNext; } } Trần Quốc Vinh 21 Khoa CNTT KTLT CHƯƠNG TRÌNH ĐẦU TIÊN DANH SÁCH LIÊN KẾT ĐƠN Bài toán: Viết chương trình thực yêu cầu sau: Nhập dslk đơn số nguyên Tính tổng giá trị dslk đơn Xuất dslk đơn Chương trình #include "stdio.h" #include "conio.h" #include "math.h" #include "string.h“ struct node { int info; struct node *pNext; }; 10 typedef struct node NODE; Trần Quốc Vinh 22 Khoa CNTT KTLT typedef NODE*NODEPTR; // Khai báo hàm void Init(NODEPTR&); NODE* GetNode(int); void AddHead(NODEPTR&, NODE*); void Input(NODEPTR&); void Output(NODEPTR); int Tong(NODEPTR); // Hàm main void main() { NODEPTR lst; Input(lst); Output(lst); int kq = Tong(lst); printf(“Tong la: %d”,kq); } Trần Quốc Vinh 23 Khoa CNTT KTLT BÀI TẬP Bài 16b: Điểm khác biệt danh sách liên kết đơn mảng động thao tác thêm xoá dslk đơn linh hoạt so với mảng động Trần Quốc Vinh 24 [...]... ”); 15 scanf(“%d”,&n); 16 Init(ptr); 17 for(int i =1; iinfo%2!=0) 8 s=s+p->info; 9 p=p->pNext; 10 } 11 return s; 12 .} Trần Quốc Vinh 20 Khoa CNTT KTLT 8 DUYỆT TUẦN TỰ DANH SÁCH LIÊN KẾT ĐƠN 1 2... CHO DANH SÁCH LIÊN KẾT ĐƠN Khái niệm: Tạo node cho danh sách liên kết đơn là xin cấp phát bộ nhớ có kích thước bằng với kích thước của kiểu dữ liệu NODE để chứa thông tin đã được biết trước Định nghĩa hàm trừu tượng NODE* GetNode(KDL x) { NODE *p=new NODE; if (p==NULL) return NULL; p->info = x; p->pNext = NULL; return p; } 1 2 3 4 5 6 7 8 9 Trần Quốc Vinh 11 Khoa CNTT KTLT 5 TẠO NODE CHO DANH SÁCH... Khoa CNTT KTLT 5 TẠO NODE CHO DANH SÁCH LIÊN KẾT ĐƠN Ví dụ 1: Định nghĩa hàm tạo một NODE cho dslk đơn các số thực để chứa thông tin đã được biết trước Định nghĩa hàm 1 NODE* GetNode(float x) 2 { 3 NODE *p = new NODE; 4 if (p==NULL) return NULL; 5 6 p->info = x; 7 p->pNext = NULL; 8 return p; 9 } Trần Quốc Vinh 12 Khoa CNTT KTLT 5 TẠO NODE CHO DANH SÁCH LIÊN KẾT ĐƠN Ví dụ 2: Định nghĩa hàm tạo... } } Trần Quốc Vinh 21 Khoa CNTT KTLT 9 CHƯƠNG TRÌNH ĐẦU TIÊN DANH SÁCH LIÊN KẾT ĐƠN Bài toán: Viết chương trình thực hiện các yêu cầu sau: Nhập dslk đơn các số nguyên Tính tổng các giá trị trong dslk đơn Xuất dslk đơn Chương trình 1 #include "stdio.h" 2 #include "conio.h" 3 #include "math.h" 4 #include "string.h“ 5 struct node 6 { 7 int info; 8 struct node *pNext; 9 }; 10 typedef struct node... Tong(NODEPTR); // Hàm main void main() { NODEPTR lst; Input(lst); Output(lst); int kq = Tong(lst); printf(“Tong la: %d”,kq); } Trần Quốc Vinh 23 Khoa CNTT KTLT BÀI TẬP Bài 16 b: Điểm khác biệt cơ bản nhất của danh sách liên kết đơn và mảng động là các thao tác thêm và xoá trên dslk đơn linh hoạt hơn so với mảng động Trần Quốc Vinh 24