Con trỏ và cấu trúc động Con trỏ và cấu trúc động Bởi: Thu Nguyen CON TRỎ VÀ CẤU TRÚC ĐỘNG 1. Khái niệm: Khi khai báo một biến, dù là biến đơn hay biế

Tài liệu tương tự
Tìm đường đi và kiểm tra tính liên thông Tìm đường đi và kiểm tra tính liên thông Bởi: Thạc sĩ Nguyễn Thanh Hùng Trong mục này ta xét ứng dụng các thu

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Trung Tâm Gia Sư Tài Năng Việt Đề Số 1 Câu 1: Sau khi thực hiện đoạn chương trình sau, giá trị của biến S bằng bao nhiêu: S

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Mảng Mảng Bởi: Thu Nguyen DỮ LIỆU KIỂU MẢNG (ARRAY) I. KHAI BÁO MẢNG Cú pháp: TYPE VAR <Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>; <Biến mảng>:<ki

HỘI THI TIN HỌC TRẺ TỈNH AN GIANG ĐỀ CHÍNH THỨC ĐỀ THI LÝ THUYẾT BẢNG A - KHỐI TIỂU HỌC Khóa ngày: Thời gian : 20 phút (không kể thời gian

OpenStax-CNX module: m Xâu ký t. * Thu Nguyen This work is produced by OpenStax-CNX and licensed under the Creative Commons Attribution License

ĐỀ cương chương trình đẠi hỌc

Bài toán cây khung nhỏ nhất Bài toán cây khung nhỏ nhất Bởi: Khoa CNTT ĐHSP KT Hưng Yên Bài toán cây khung nhỏ nhất Bài toán cây khung nhỏ nhất của đồ

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

Chương trình dịch

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

Chương trình dịch

Các biến và các kiểu dữ liệu trong JavaScript Các biến và các kiểu dữ liệu trong JavaScript Bởi: Hà Nội Aptech Các biến (Variables) Biến là một tham c

Nhúng mã-cách khai báo biến Nhúng mã-cách khai báo biến Bởi: Khoa CNTT ĐHSP KT Hưng Yên Nhúng mã javascript trong trang HTML Bạn có thể nhúng JavaScri

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

Chương 1:

Slide 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Tệp tin Nội dung 1. Khái niệm cơ bản 2. Các thao tá

Lập trình cấu trúc trong Visual Basic Lập trình cấu trúc trong Visual Basic Bởi: Nguyễn Sơn Học xong chương này, sinh viên phải nắm bắt được các vấn đ

Microsoft Word - co_ban_ve_jquery.docx

Loi vong lap lap vo tan - Worksheet_Change

Lkgjlfjq?etyuiiofjkfjlsfjkslddghdgertt

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

OpenStax-CNX module: m Lập trình hàm ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licensed under the Creative Commons Attribu

Chương II - KIẾN TRÚC HỆ ĐIỀU HÀNH

ĐỀ CƯƠNG ÔN THI 1. Khái niệm về điều khiển Logic khả trình Có rất nhiều định nghĩa về bộ điều khiển Logic khả trình (Programmable logic controller viế

PowerPoint Presentation

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Microsoft Word - phuong-phap-thuyet-minh.docx

Xử lý chuỗi, mảng và các hàm ngày tháng trong PHP Xử lý chuỗi, mảng và các hàm ngày tháng trong PHP Bởi: Phạm Hữu Khang Bài học này chúng ta sẽ làm qu

03_Tap hop_P2_Baigiang

9-KiemThu

Chương trình dịch

I. MSWLogo là gì. Giới thiệu. Là một ngôn ngữ lập trình được thiết kế và phát triển bởi Seymour Papert, Daniel Bobrow và Wallace Feurzeig. Trong chươn

Chương trình dịch

Microsoft Word - doc_ghi_file_trong_nodejs.docx

(Tái bản lần thứ hai)

Bài tập chương 1 ngôn ngữ lập trình visual basic Bài tập chương 1 ngôn ngữ lập trình visual basic Bởi: Khoa CNTT ĐHSP KT Hưng Yên MỤC TIÊU: SAU KHI HO

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP HỒ CHÍ MINH KHOA NÔNG HỌC

TẬP ĐOÀN ĐIỆN LỰC VIỆT NAM TRƯỜNG ĐẠI HỌC ĐIỆN LỰC GIÁO TRÌNH ĐẠI HỌC BẢO VỆ RƠLE TRONG HỆ THỐNG ĐIỆN Tài liệu tham khảo nội bộ dùng trong Khoa Hệ thố

NGÔN NGỮ THỐNG KÊ R

2018 Nhận xét, phân tích, góp ý cho Chương trình môn Tin học trong Chương trình Giáo dục Phổ thông mới

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

Lớp đối tượng String Lớp đối tượng String Bởi: Khuyet Danh Ngôn ngữ C# hỗ trợ khá đầy đủ các chức năng của kiểu chuỗi mà chúng ta có thể thấy được ở c

ĐHQG TPHCM ĐH Bách Khoa Khoa Đ-ĐT BM Điện Tử Điểm Đáp án của Đề kiểm tra giửa HK 2 NH: Môn: Vi xử lý Mã MH: Ngày thi: 20/03/2013 Thời

Phân tích Nhân vật Hoạn Thư trong Đoạn trường tân thanh của Nguyễn Du

A+ Guide to Managing and Maintaining Your PC, 4e

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

Chương 4 Ước lượng tham số Bài giảng Lý thuyết xác suất và thống kê toán Lý thuyết mẫu Phương pháp mẫu Cách trình bày mẫu Các đặc trưng mẫu Tính các đ

MỘT SỐ LƯU Ý KHI DẠY CÁC TIẾT ÔN TẬP CHƯƠNG Môn Tin học cung cấp cho học sinh những kiến thức phổ thông về ngành khoa học tin học, hình thành và phát

Chuyển đổi tương tự - số photonic bằng cách dùng buồng cộng hưởng Fabry- Perot phi tuyến Chuyển đổi tương tự - số song song về mặt không gian được đề

Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng BAØI TAÄP CHÖÔNG 1 1. Viết giải thuật để mô tả thói quen mỗi buổi sáng của bạn, từ lúc ngh

SM-N9208 SM-N920C SM-N920CD SM-N920I Sách hướng dẫn sử dụng Vietnamese. 08/2015. Rev.1.0

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRUNG TÂM LUYỆN THI THỦ KHOA Hồ Chí Minh - Năm

MÔN SINH HỌC 11 GV. Phạm Hữu Nghĩa GIÁO ÁN BÀI 24: ỨNG ĐỘNG I. MỤC TIÊU BÀI HỌC: Qua bài này HS phải: 1. Kiến thức: - Nêu được khái niệm ứng động. - P

Phụ lục 2: HỒ SƠ NĂNG LỰC NĂM 2014

SM-G925F Sách hướng dẫn sử dụng Vietnamese. 04/2015. Rev.1.0

Nội dung chương 3 IT1110 Tin học đại cương Phần I: Tin học căn bản Chương 3: Hệ thống máy tính 3.1. Giới thiệu 3.2. Chức năng và các thành phần của má

1. PHI1004 Những nguyên lý cơ bản của Chủ nghĩa Mác Lênin 1 2 tín chỉ Học phần tiên quyết: Không Tóm tắt nội dung học phần: Học phần những nguyên lý c

PowerPoint Template

Microsoft Word - dinh_dang_smartart_trong_powerpoint_2010.docx

Phân tích bài Tiếng nói của văn nghệ

ÑAÏI HOÏC QUOÁC GIA TP

Microsoft Word - Module 2. Cau truc cua may tinh dien tu.doc

Microsoft Word - Document1

04_Ly thuyet co ban ve Giao thoa song_TL BaiGiang

Hướng dẫn sử dụng Camera thông minh EZVIZ C6C Bước 1 : Kết nối Camera với phần mêm EZVIZ (ta có thể tham khảo phần thêm Camera vào trong phần EZVIZ) B

TRUNG TÂM ĐÀO TẠO LẬP TRÌNH VIÊN QUỐC TẾ

Phụ lục 2: HỒ SƠ NĂNG LỰC NĂM 2014

TÊN CHƯƠNG

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

Microsoft Word - on-tap-phan-lam-van.docx

Tài liệu Hướng dẫn sử dụng

Công ty CP công nghệ thẻ NACENCOMM HÓA ĐƠN ĐIỆN TỬ CA2 CÔNG TY CỔ PHẦN CÔNG NGHỆ THẺ NACENCOMM TÀI LIỆU NGHIỆP VỤ HÓA ĐƠN ĐIỆN TỬ CA2 Hà Nội 12/2017 1

PowerPoint Presentation

TRƯỜNG ĐẠI HỌC NAM CẦN THƠ KHOA LUẬT ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN XÃ HỘI HỌC PHÁP LUẬT (LƯU HÀNH NỘI BỘ) CẦN THƠ 2018

Kiểm soát truy suất Kiểm soát truy suất Bởi: Khoa CNTT ĐHSP KT Hưng Yên Khái niệm Bảo mật thực chất là kiểm soát truy xuất [1]. Mục đích của bảo mật m

ID

Trường Đại học Dân lập Văn Lang - Nội san Khoa học & Đào tạo, số 5, 11/2005 NHÓM HỌC TẬP SÁNG TẠO THS. NGUYỄN HỮU TRÍ Trong bài viết này tôi muốn chia

SM-G935F SM-G935FD Sách hướng dẫn sử dụng Vietnamese. 02/2016. Rev.1.0

Hệ điều hành Bài tập tuần 6 1 Quản lý bộ nhớ Bài tập 1 : Xem thông tin bộ nhớ 1. Sử dụng top, ps đọc thông tin về kích thước vùng nhớ của 1 tiến trình

CÔNG TY TNHH PHẦN MỀM H2SOFT 38/1 Đường Đồi 82 Hòn Nghê Vĩnh Ngọc Nha Trang- Khánh Hòa Website: TÀI LIỆU

Sổ tay hướng dẫn Phương pháp đánh giá hiện trạng bờ biển bằng ghi hình video (SVAM)

Thuyết minh về lễ hội làng – Văn mẫu lớp 9

KHAI THÁC CÁC GIÁ TRỊ CỦA VĂN HÓA ẨM THỰC ĐỂ THU HÚT KHÁCH DU LỊCH QUỐC TẾ Tóm tắt LÊ ANH TUẤN - PHẠM MẠNH CƯỜNG Trong những năm gần đây, văn hóa ẩm t

SỞ GD&ĐT NGHỆ AN KÌ THI THỬ THPT QUỐC GIA LẦN I NĂM 2019 LIÊN TRƯỜNG THPT Bài thi: NGỮ VĂN Thời gian làm bài: 120 phút, không kể thời gian phát đề I.

HỌC 214 BỘ THỦ CHỮ HÁN NGỮ PHÂN LOẠI THEO SỐ NÉT BỘ 01 NÉT: 06 bộ: 1. 一 Nhất: Một, thứ nhất,khởi đầu các số đo, thuộc về dương, bao quát hết thảy. 2.

Kyõ Thuaät Truyeàn Soá Lieäu

Truy vấn, Ràng buộc, Trigger Truy vấn, Ràng buộc, Trigger Bởi: Ths. Phạm Hoàng Nhung SQL (Structured Query Language) là ngôn ngữ truy vấn cấu trúc đượ

BỘ GIÁO DỤC VÀ ĐÀO TẠO

Microsoft Word - de thi HSG su 8 Phuong BL Dong son.doc

Kiến trúc tập lệnh1

Microsoft Word - Muc dich mon hoc.doc

BÀI GIẢNG MÔN HỌC HỆ THỐNG THÔNG TIN ĐỊA LÝ

HƯỚNG DẪN SỬ DỤNG

Microsoft Word - jsp_syntax.docx

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Huong dan su dung phan mem Quan ly chat luong cong trinh GXD

Công thái học và quản lý an toàn

Bản ghi:

Bởi: Thu Nguyen CON TRỎ VÀ CẤU TRÚC ĐỘNG 1. Khái niệm: Khi khai báo một biến, dù là biến đơn hay biến thuộc kiểu dữ liệu có cấu trúc, ta đã quy định độ lớn vùng nhớ dành cho biến: VD: a: real; biến a cần 6 byte B: array[1..100] of integer; biến mảng b cần 200 byte Việc khai báo như trên thường là phỏng đoán dung lượng cần thiết chứ không thật chính xác, gây nên lãng phí bộ nhớ. Để tiết kiệm bộ nhớ, ngay khi chương trình đang làm việc, người lập trình có thể yêu cầu cấp phát bộ nhớ cho các biến, điều này gọi là cấp phát bộ nhớ động. Cấp phát bộ nhớ động được thực hiện thông qua biến con trỏ. Muốn có biến con trỏ ta phải định nghĩa kiểu con trỏ. Kiểu dữ liệu con trỏ-biến con trỏ: Con trỏ có định kiểu: Kiểu con trỏ là một kiểu dữ liệu đặc biệt dùng để biểu diễn các địa chỉ. Kiểu con trỏ được định nghĩa theo cú pháp: Tên kiểu con trỏ=^kiểu dữ liệu; Ví dụ 4.1: Chu=String[20]; CT1=^Byte; CT2=^Chu; 1/12

CT3=^Nguoi; Nguoi=record Hoten:String[20]; Namsinh:1900..2100; End; Chú ý: ta chỉ được phép đưa trực tiếp vào định nghĩa kiểu con trỏ các kiểu dữ liệu đơn giản sau: số nguyên, số thực, ký tự. Các kiểu dữ liệu có cấu trúc muốn đưa vào con trỏ thì phải thông qua một tên kiểu khai báo trong phần Type. Cách định nghĩa 2 kiểu con trỏ Hoten và Ds sau là sai: Type Hoten=^String[20]; Ds=Array[1..10] of Byte; Muốn sử dụng kiểu chuỗi và mảng cho kiểu con trỏ chúng ta phải định nghĩa như sau: Type S1=String[20]; Hoten=^S1; a=array[1..10] of Byte; Ds=^a; Biến con trỏ: Biến con trỏ có thể khai báo thông qua kiểu con trỏ hoặc khai báo trực tiếp. Ví dụ 4.2: Var So:^integer; 2/12

Sinhvien:CT3; Hoten:CT2; Thutu, Mahoso:^Word; Biến con trỏ không dùng để lưu trữ các giá trị của biến mà lưu trữ địa chỉ của biến. Dù kích thước vùng dữ liệu mà các biến con trỏ trỏ tới khác nhau nhưng kích thước của biến con trỏ vẫn là 4 byte. Con trỏ không định kiểu: Là kiểu con trỏ không quan tâm đến kiểu dữ liệu mà nó trỏ tới. Cách khai báo: Var tên biến: Pointer; Địa chỉ của một đối tượng: Địa chỉ một đối tượng trong bộ nhớ được xác định bởi địa chỉ của ô nhớ đầu tiên mà hệ thống dành cho đối tượng đó. $0101 $FFFF Segment (địa chỉ đoạn) Offset(địa chỉ tương đối trong đọan) Địa chỉ ô thứ 65535, thuộc đoạn 257. Các thủ tục và hàm tác động lên con trỏ: Ct:=nil; Gán giá trị ban đầu: Gán địa chỉ của một đối tượng cho con trỏ: 1. ct:=@x; b. ct:=addr(x) Hàm Addr()cho địa chỉ của đối tượng x, địa chỉ này thuộc kiểu Pointer c. ct:=ptr(segment): 3/12

Hàm Ptr trong phép gán trên đòi hỏi các tham số segment và offset phải là giá trị kiểu Word viết trong hệ 16, ví dụ : ct:= Ptr($B800,$0000);đưa con trỏ trỏ tới ô nhớ của vùng Video Ram Nhận xét: Hai phép gán @ và Addr() cùng trả về địa chỉ kiểu pointer nên chúng là tương đương. 3. 3 phép gán giữa hai con trỏ Hai con trỏ tương thích (cùng kiểu) có thể gán giá trị cho nhau, khi đó chúng cùng trỏ tới một địa chỉ. Ví dụ 4.3 Var ct1:^float; ct2:^byte; ct3:^pointer; x:string; Ví dụ trên khai báo ba con trỏ thuộc ba kiểu khác nhau, ct1 là con trỏ thực,ct2 là con trỏ nguyên và ct3là con trỏ không định kiểu, x là biến chuỗi. Khi đó các phép gán : ct3:@x; ct2=ct3; là hợp lệ vì ct2 và ct3 là tương thích, chúng cùng trỏ đến địa chỉ cùng biến x ct1:=ct2; là không hợp lệ vì hai con trỏ không tương thích. 3. 4 Phép so sánh hai con trỏ Chỉ tồn tại phép so sánh =(bằng nhau)và<>(khác nhau)giữa hai con trỏ nếu chúng tương thích. Kết quả so sánh là một giá trị Boolean nghĩa là True hoặc False. 4/12

Hai con trỏ tương thíchgọi là bằng nhau nếu chúng cùng trỏ tới một đối tượng, ngược lại gọi là khác nhau. 4.Truy nhập dữ liệu Khi con trỏ ct đang trỏ tới một vùng dữ liệu nào đó Pascal cho phép dùng ký hiệu ct^ như là một biến để truy nhập vào vùng dữ liệu đó. Biến ct^ mang trong đó dữ liệu của vùng mà con trỏ ct đang trỏ tới. Như vậy chúng ta có thể truy nhập tới một biến, hàm hai thủ tục mà không cần biết tên các đối tượng này miễn là biết con trỏ đang trỏ vào chúng. Ví dụ 4.5 Program contro; Uses crt; Type zl= string[3]; Var z:string;ct:^zl;i:byte; clrscr; z:= Ha noi ;ct:=@z; writeln(ct^); For i:=1 to length(z) do write(upcase(ct^[i]); Readln; End. Chạy chương trình ta nhận được kết quả: Ha noi HA NOI 5/12

Mọi xử lý trên biến z đều có thể xử lý trên biến ct^ bởi vì biến con trỏ ct đang trỏ vào z. 1. Mảng con trỏ và con trỏ kiểu mảng: Con trỏ là một kiểu dữ liệu nên biến con trỏ có thể là các thành phần của mảng, ngược lại mảng là một kiểu dữ liệu có cấu trúc nên con trỏ cũng có thể trỏ tới các biến mảng. 5.1 Con trỏ kiểu mảng: Khai báo: Type m= array[1..5] of Byte; Var Ct1:^m; Ct1 là biến con trỏ kiểu mảng, khi đó biến ct1^ sẽ gồm 5 phần tử, mỗi phần tử là một số kiểu Byte. Truy cập vào biến ct1^: Read(ct1^[i]); hoặc Write(ct1^[i]); 5.2 Mảng các con trỏ: Khai báo: Var: Ct:array[1..10] of ^string; s1,s2:string; s1,s2:string; S1:= Ha noi Viet nam ; S2:= Happy new Year ; 6/12

Ct là mảng 10 con trỏ, tất cả 10 con trỏ trỏ tới đến kiểu dữ liệu String. Mỗi con trỏ trỏ đến một đối tương khác nhau. Nếu ta chưa gán địa chỉ của bất kỳ đối tượng nào cho biến con trỏ mà chỉ thực hiện phép gán: Ct[i]:^=s1; với 1<=i<=10 Thì 10 con trỏ đều trỏ tới s1; Trong trường hợp ta gán dữ liệu từ một đối tượng cho nhiều biến con trỏ thì tất cả các con trỏ trỏ tới đối tượng được gán cuối cùng. Nếu thực hiện phép gán: Ct[1]:=@s2; Nghĩa là gán địa chỉ của biến s2 vào con trỏ thứ nhất trong mảng thì chỉ có ct[1] là trỏ tới biến s2, các con trỏ con lại chưa trỏ vào đâu cả. 1. Danh sách liên kết và hàng đợi: Danh sách là một tập hợp hữu hạn các phần tử liên kết với nhau, trường hợp tổng quát nhất mỗi phần tử là một bản ghi. Điều đặt biệt của mỗi bản ghi trong danh sách là ngoài các trường dữ liệu, còn một trường dùng để liên kết và trường này lại là một con trỏ. Con trỏ này có nhiệm vụ trỏ vào địa chỉ của bản ghi kế tiếp. Nếu bản ghi hiện thời là bản ghi cuối cùng thì con trỏ sẽ trỏ vào Nil. Một danh sách chưa có phần tử nào được gọi là danh sách rỗng. Việc thêm một phần tử vào danh sách có thể rơi vào một trong ba khả năng: 1. Phần tử mới được thêm vào đầu danh sách 2. Phần tử mới được thêm vào cuối danh sách. 3. Phần tử mới được thêm vào một vị trí xác định Trường hợp a ta có danh sách liên kết ngược (LIFO), còn trường hợp b ta có danh sách liên kết thuận (FIFO) hay còn gọi là hàng đợi QUEUE. Danh sách liên kết ngược: Là loại danh sách mà trường liên kết của phần tử tạo ra sau luôn trỏ vào phần tử trước đó. 7/12

Phần tử cuối Dữ liệu Trường liên kết Các phần tử trung gian Dữ liệu Trường liên kết Phần tử đầu NilDữ liệu Trường liên kết Type Ds=^nguoi; Nguoi=record Mhs:byte; Hoten:string[20]; Diem:real; Tiep:ds; End; Sau khi khai báo kiểu dữ liệu cần khai báo biến con trỏ Dslop để lưu trữ dữ liệu nhập vào và biến Ctcuoi (con trỏ cuối) để trỏ vào phần tử cuối cùng. Đoạn chương trình mô phỏng tạo danh sách liên kết ngược. Ctcuoi:=nil; {khởi tạo danh sách}; Bắt đầu lặp: New (dslop); {tạo biến động lưu trữ dữ liệu nhập vào} Nhập dữ liệu; {nhập dữ liệu cho phần tử thứ i} 8/12

Tiep:=ctcuoi; {trường liên kết của phần tử thứ i trỏ vào địa chỉ của con trỏ cuố ctcuoi} Ctcuoi:=dslop; {hướng ctcuoi vào bản ghi hiện thời} Kết thúc lặp. Ví dụ 4.6 : Xây dựng danh sách, chương trình con Hien_LIFO cho hiện dữ liệu lên màn hình theo chiều ngược, phần tử nhập sau hiện trước. Program dslk_nguoc; Uses Crt; Type ds=^nguoi; Nguoi=record Mhs:byte; Hoten:string[20]; Diem:real; Tiep:ds; End; VAr dslop,ctcuoi:ds; i,j:byte; tt:char; Procedure Hien_LIFO; var ct1:ds; clrscr; writeln('du lieu da nhap-hien tu cuoi ve dau'); writeln; 9/12

ct1:=ctcuoi; while ct1<>nil do with ct1^ do write(mhs,' ',hoten); for j:=1 to (20-length(hoten)) do write(''); writeln(diem:5:2); ct1:=tiep; end; end; clrscr; ctcuoi:=nil; i:=0; Repeat; New(dslop); i:=i+1; With dslop^ do writeln('ma ho so:',i);mhs:=i; write('ho va ten:'); readln(hoten); write('diem');readln(diem); tiep:=ctcuoi; ctcuoi:=dslop; 10/12

writeln('nhap tiep khong?c/k'); tt:=readkey; writeln; end; Until tt in ['k','k']; Hien_lifo; Readln; END. Hàng đợi Queue-Danh sách liên kết thuận: Là loại danh sách mà phần tử nào nhập trước thì được lấy ra trước. Ctdau:=nil; {khởi tạo danh sách}; Bắt đầu lặp: New (dslop); {tạo biến động lưu trữ dữ liệu nhập vào} Nhập dữ liệu; {nhập dữ liệu cho phần tử thứ i} Nếu ctdau=nil thì ctdau:=dslop; Ngược lại ctcuoi^.tiep:=dslop; Ctcuoi:=dslop; Ctcuoi^.Tiep:=nil; Ctcuoi:=dslop; {hướng ctcuoi vào bản ghi hiện thời} Kết thúc lặp. Chèn thêm phần tử vào danh sách: Quá trình chèn một phần tử vào danh sách qua các bước sau: - Xác định vị trí chèn - Tạo một biến động và xin cấp phát vùng nhớ cho biến động để lưu dữ liệu sẽ chèn vào danh sách. 11/12

- Chuyển trường Tiep của phần tử hiện thời đến phần tử bổ sung - Chuyển trường Tiep của phần tử bổ sung đến phần tử trước phần tử hiện thời. New(ct1); With ct1^ do Nhập dữ liệu cho phần tử bổ sung Dslop:=ctcuoi; {hướng con trỏ đến phần tử cuối cùng trong danh sách} While (dslop<>nil) and (dslop^.mhs<>n) do Dslop:=dslop^.tiep; {hướng con trỏ đến vị trí cần chèn} Ct1^.tiep:=dslop^.tiep; Dslop^.tiep:=ct1; 12/12