Bài 2 5 Danh sách móc nố

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 63 - 65)

/ *n ếu là dấu cách thì cắt nó kh

Bài 2 5 Danh sách móc nố

Tóm tắt nội dung:

Sử dụng bộ nhớ động ta có thể xây dựng các cấu trúc danh sách móc nối. Bày này trình bày cách thức và một số ví dụ minh hoạ cho việc tạo dựng danh móc nối trong C.

Thời lượng: 2 tiết

Một trong những ứng dụng phổ biến của bộ nhớ động là để tạo danh sách móc nối. Một danh sách móc nối được tạo ra bởi các nút kiểu cấu trúc với hai phần: nội dung thông tin của các nút trong danh sách và con trỏ liên kết tới nút lân cận trong danh sách. Ví dụ sau đây là một mẫu cấu trúc cho một danh sách móc nối đơn.

struct <tên nút> {

<các trường thông tin> struct <tên nút> * tiep; };

hoặc

typedef struct {

<các trường thông tin> <kiểu nút> * tiep; }<kiểu nút>; Ví dụ: struct nut_hs { char ten[25]; int diem;

struct nut_hs* tiep; };

hoặc

typedef struct {

char ten[25]; int diem; nuths_t* tiep; }nuths_t;

Cấu trúc danh sách được gọi là động bởi số lượng phần tử của danh sách là khơng cố định. Khi có thêm một phần tử mới ta chỉ việc cấp phát thêm một nút (dùng malloc) và nối nó vào một vị trí trong danh sách. Một nút khi bị xố khỏi danh sách thì nó sẽ được giải phóng khỏi bộ nhớ (dùng free). Việc truy cập danh sách thường được thực hiện thông qua một con trỏ tới nút đầu tiên trong danh sách. Xem thêm chương trình mẫu minh hoạ dưới đây.

Chương trình mẫu (mocnoi.c): Quản lí danh sách học sinh lớp học bằng danh sách móc nối.

#include <stdio.h> #include <alloc.h> #include <stdlib.h> struct nut_hs { char ten[25]; int diem;

struct nut_hs* tiep; };

/* khai báo biến tổng thể là con trỏ đến nút đầu danh sách */ struct nut_hs *nutdauds = NULL; /* ban đầu danh sách rỗng */

/* thêm một nút học sinh mới có tên (ten) và điểm (diem) vào danh sách */ void them_nuths(char* ten, int diem);

/* xoá một nút học sinh có tên là ten */ void xoa_nuths(char *ten);

/* in danh sách học sinh */ void in_ds(); void main() { char ten[25]; int diem; int chon; /* tạo menu lựa chọn công việc */ do {

printf("1. Nhap hoc sinh\n"); printf("2. Xoa hoc sinh\n");

printf("3. In danh sach hoc sinh\n"); printf("0. Thoat\n"); printf("Lua chon: "); scanf("%d", &chon); switch(chon) { case 1:

fflush(stdin); /* xoá vùng đệm stdin để nhập xâu tên */ printf("Ten: "); gets(ten);

if (strcmp(ten, "")!=0) {

printf("Diem: "); scanf("%d", &diem); them_nuths(ten, diem);

}

break;

case 2:

fflush(stdin); /* xoá vùng đệm stdin để nhập xâu */ printf("Ten hoc sinh can xoa: "); gets(ten);

xoa_nuths(ten); break; case 3: in_ds(); } }while(chon !=0); }

void them_nuths(char* ten, int diem) {

struct nut_hs * hs;

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 63 - 65)