Trò (không được dùng con trỏ đâu) để đi chuyển đọc theo danh sách Còn phép ghép

Một phần của tài liệu Tổ chức chương trình về mặt dữ liệu (Trang 33 - 35)

- Sau khi bổ sung:

trò (không được dùng con trỏ đâu) để đi chuyển đọc theo danh sách Còn phép ghép

hai đanh sách được thực hiện bằng cách ghép danh sách này vào cuối của danh sách kia (het ý trường hợp danh sách rỗng)... Các phép này sẽ được lần lượt giới thiệu

qua các ví dụ đưới đây. Ỷ

Ví dụ 3-28. Xét lại Ví dụ 3-24. ở trên, ta thấy rằng việc không biết trước số lượng các bản tin cần lưu trữ là một hạn chế của việc dùng mắng. Nếu khai báo kích thước mảng quá lớn có thể gây ra lãng phí bộ nhớ. Ngược lại có thể bị thiếu bộ nhớ khi chạy chương trình. Một giải pháp tương đối hiệu quả trong trường hợp này

Tà tổ chức dữ liệu dưới đạng danh sách móc mối.

Du xxx xngnnnnnanaaaaa an * #include "stdio.h" #inclưde “conio.h” #include "alloc.h" Struct Date { tnsigned Ngay:5; utsigned Thang:4; unsigned Nam:15; typedef Strưct pp {

Struct Date ThoiGian; char DiaDiem[35]; float LưongMua; int NhietDo:8; struct pp *“Tiep;

} ThoiTiet; /* Định nghĩa một kiểu cấu trúc tự trỏ có tên là ThoiTiet *

/Ð0Y0914101114461.11111.11111-04143111150115 11142115 TT xxx ky xg yyy *‡ int main(}

int NhietDoMax, xToaDo, yToaDo, SoPT=0; float LưongMuaTB;

ThoïTiet ThơiTietNgay, *Dau=NULL, *Duyet, *Q, *Cuoi; clrser(); printf(“aNhap du lieu \n;

do

{_ itTG:

float Tam;

printf( “Ngay ");

XToaDo= wherex()+3; yToaDo= whereyQ;

Scanf(%d",&TG): ThoiTietNgay. ThoiGian.Ngay=TG;

if(TGI=0}

{

gotoxy(xToaDo, vToaDo); xToaDo+=10; printf("Thang "); ‹ canf(“%d",&TG); ThoiTietNgay.ThoiGian.Thang=TG;

gotoxy(xToaDo,yToaDo); printf(“Nam ”); scanf("%d”, &TG); ThoiTietNgay. ThoiGian.Nam=TG;

printf("Dia diem "); fflush(stdin); gets(ThoiTietNgay.DiaDiem);

printf(“Luong mua "); scanf(“%f”, &Tam); ThoïTietNgay,LuongMua=Tam;

printf(“Nhiet do "); scanf(“%d", &TG); -ThoiTietNgay.NhietDo=TG;

PrÍf(f**t92trsrtrtreeanm)

}

if(ThoiTietNgay.ThoiGian.Ngay!=0)

{

/* Xin một nút để chứa một bản tin*/

Q = (ThoïTiet") malloc(sizeof (ThoïTiet));

if(Q) / hết bộ nhớ * { {

printf(“nKhong du bo nho cho chuong trinh”);

exit(1); /* thoát khỏi chương trình một cách bình thường */ *Q=ThoiTietNgay; /* Đưa nội dung bản tín vừa nhập vào nút mới xin */

/* Bắt đầu bổ sung nút mới xin vào danh sách */

# Trường hợp danh sách rỗng */

if(IDau) ˆ

{

Dau= Q¡ /* Nút đầu tiên trong danh sách*/

Dau->Tiep=NULL; /*Phần tử cuối của danh sách*/

Cuoi=Dau;/" Giữ lấy nút cuối cho lần nhập sau*/ else /* trường hợp không phải tà nút đầu tiên */

Cuoi->Tiep = Q; /* Bổ sung nút mới vào cuối danh sách */

Cuoi=Cuoi->Tiep; /" Di chuyển con trổ Cuoi để trỏ vào phần tử cuối cùng trong danh sách */

Cuoi->Tiep=NULL; /* Đánh đấu nút cuối */

} } }

}

while (ThoïTietNgay.ThoiGian.Ngay!=0); / kết thúc nhập */

Tìm nhiệt độ cao nhất và lượng mưa trung bình — thao tác duyệt */ NhietDoMax= -128; LuongMuaTB=0;

Duyet= Dau; /* Bắt đầu xét từ phần tử đầu tiên trong danh sách */

Một phần của tài liệu Tổ chức chương trình về mặt dữ liệu (Trang 33 - 35)

Tải bản đầy đủ (PDF)

(44 trang)