Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
632 KB
Nội dung
TỔNG QUAN VỀ CẤU TRÚC MÁY TÍNH Chương 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU o0o -1.1 Khái niệm cấu trúc liệu Cấu trúc liệu (CTDL) cách tổ chức liệu toán CTDL ngôn ngữ lập trình định nghĩa trước người sử dụng định nghĩa Cấu trúc liệu tốt thuật toán xử lý toán tối ưu Chính vậy, Niklaus wirth tổng kết: “Cấu trúc liệu + thuật toán = Chương trình” Cách biểu diễn tối ưu cấu trúc liệu nhớ gọi cấu trúc lưu trữ (storage structure) Có thể có nhiều cấu trúc lưu trữ cho cấu trúc liệu Cấu trúc liệu tương ứng với nhớ gọi lưu trữ hay tương ứng với nhớ gọi lưu trữ Thông thường kiểu liệu định nghĩa sau: Một kiểu liệu T cặp T = đó: - V (value) : Là tập trị mà biến có kiểu T nhận - O (Operator) : Là tập hợp thao tác V Ví dụ: a T ≡ Integer = V={-32768, ,32767} ; O={+,-,*,/,mod,div,xor,, } b T ≡ Boolean = V={True, False}; O = { And, Or, Xor, Not, , =,…} Một cấu trúc liệu kiểu liệu xây dựng từ kiểu liệu biết, trường hợp cho ta CTDL tương ứng với kiểu liệu cho 1.2 Các cấu trúc liệu 1.2.1 Các kiểu liệu - Kiểu Integer (nguyên – byte, -32768 32767) Gồm tập hợp số nguyên Tất phép toán liệu integer tuân thủ qui tắc số học Các toán tử chuẩn gồm bốn phép toán số học bản: cộng (+), trừ (-), nhân (*), chia nguyên (div) - Kiểu Real (thực – byte,2.9E-39 1.7E38) Gồm tập hợp số thực, toán tử chuẩn gồm bốn phép toán số học là: công (+), trừ (-), nhân (/) - Kiểu Boolean (luận lý – bit) Gồm hai giá trị luân lý true (đúng) false (sai) Các toán tử luận lý gồm ba phép toán bản: not (phủ định), and (và) or (hay) Các phép toán so sánh cho kết giá trị luận lý Các phép toán so sánh gồm: = khác (khác) < nhỏ lớn >= lớn - Kiểu char ( kí tự – byte): Gồm tập hợp kí tự in Các kí tự thường dùng là: + Kiểu char gồm 26 chữ Latin ((‘A’R then Begin F:=0; R:=0; End; End; End; + Phương pháp di chuyển vòng Procedure Del_Queue(Var Q:Queue;Var X:element); Begin If F=0 then Write(‘CAN’) Else Begin X:=Q[F]; If F=R then Begin F:=0; R:=0; End Else Begin F:=F+1; If F>n then F:=1; End; End; End; b Dùng danh sách liên kết để biểu diễn hàng đợi Rear đầu thêm vào Front đầu loại bỏ * Các phép toán - Khởi tạo hàng đợi: Khi khởi tạo, hàng đợi rỗng, ta cho Front Rear có giá trị nil Thuật toán: Procedure Initialize; Begin Front := nil; Rear := nil; end; - Thêm phần tử vào hàng đợi: Khi dùng danh sách liên kết để biểu diễn hàng đợi phép thêm vào hàng đợi tương tự thêm phần tử vào cuối danh sách liên kết Giả sử ta cần phần tử p có nội dung NewInfo vào hàng đợi Thuật toán: Procedure Insert_queue ( NewInfo : Element; Var Front, Rear:Tro ); Var q,p :tro; Begin New(p) ; p^.Info := NewInfo ; P^ Link := nil; If Front = nil then Begin Front := p; Rear:=p; End; Else Begin Rear^.Link := p; Rear := p; End; End; - Loại bỏ phần tử hàng Biến succ có giá trị true hàng đợi khác rỗng nội dung lấy Infox Biến succ có nội dung false hàng đợi rỗng Thuật toán: Procedure Delete_queue (Var Infox : Element; Var succ :boolean; Var Front, Rear:Tro); Var P:Tro; Begin succ := false ; If Front nil then Begin succ := true; p := Front; Front := p^.Link ; Infox := p^.Info ; if Front = nil then Rear := nil ; Dispose(p); End; End; 2.4.2.4 Ứng dụng Trong thực tế Queue có nhiều ứng dụng - Bộ đệm bàn phím - Hàng đợi lệnh CPU - Bộ đệm máy tính máy in BÀI TẬP CHƯƠNG Bài tập 1: Viết chương trình chuyển đổi số nguyên (đơn vị giây) sang dạng giờ… phút…giây Dạng mẫu chương trình chạy sau: Đưa vào số nguyên (đơn vị giây): 3812 3812 giây = phút 32 giây Bài tập 2: Viết chương trình đọc số nguyên hiển thị a Các chữ số số ấy, tổng chữ số b Số đảo ngược c Hiệu số với số đảo ngược Bài 3: Viết chương trình đọc số nguyên, hiển thị giá trị sau: S = 1-2+3-4+5-6+…+(-1)n*n Bài 4: Viết chương trình hiển thị tất số nguyên gồm có chữ số cho tổng tất chữ số tích chúng Bài 5: Viết chương trình nhập vào chuỗi chứa ho, tên chữ lót chuyển sang dạng tên, họ chữ lót Ví dụ, chuỗi “Hoàng Nguyệt Kim” chương trình chuyển thành “Nguyệt Hoàng Kim” Bài 6: Viết chương trình đọc chuỗi (một dòng văn bản) hiển thị từ hàng số từ câu Bài tập 7: Viết chương trình nhập vào dãy số thực số thực x Thông báo lên hình số lượng phần tử dãy x vị trí chúng Bài tập 8: Nhập vào mảng số nguyên a/ Xếp lại mảng theo thứ tự giảm dần b/ Nhập vào số nguyên từ bàn phím Chèn số vào mảng cho mảng có thứ tự giảm dần (không xếp lại mảng) Gợi ý: - Tìm vị trí cần chèn: i - Đẩy phần tử từ vị trí i tới n sang phải vị trí - Gán: A[i]=x; Bài tập 9: Cho mảng số nguyên: Mảng A có m phần tử, mảng B có n phần tử a/ Sắp xếp lại mảng theo thứ tự giảm dần b/ Trộn mảng lại thành mảng C cho mảng C có thứ tự giảm dần (Không xếp lại mảng C) Gợi ý: - Dùng số i,j để duyệt qua phần tử mảng A, B k số cho mảng C - Trong (i[...]... có mối quan hệ tương đối: Nếu biết phần tử a i thì sẽ định được vị trí phần tử ai+1 Nói cách khác hơn, các phần tử thuộc một danh sách có thể sắp xếp tuyến tính Ví dụ 1: - Danh sách sinh viên là một danh sách - Kiểu dữ liệu mảng trong pascal là một danh sách 2.2 Danh sách đặc 2.2.1 Định nghĩa Danh sách đặc là một danh sách mà các phần tử được sắp xếp kế tiếp nhau trong bộ nhớ 2.2.2 Tổ chức cấu trúc dữ... sách mà các phần tử được nối kết nhau nhờ vào vùng liên kết của chúng Danh sách liên kết là một loại cấu trúc đơn giản và thích hợp với các phép thêm vào, phép loại bỏ, phép ghép nhiều danh sách mà các phép toán này lại không thích hợp cho danh sách đặc 2.3.2 Danh sách liên kết đơn 2.3.2.1 Tổ chức cấu trúc dữ liệu Danh sách liên kết là danh sách mà mỗi phần tử của danh sách được lưu trữ trong một phần... chương trình đó lồng nhau là T(n) = O(f(n).g(n)) Qui tắc tổng quát để phân tích một chương trình: - Thời gian thực hiện của mỗi lệnh gán, READ, WRITE là O(1) - Thời gian thực hiện của một chuỗi tuần tự các lệnh được xác định bằng qui tắc cộng Như vậy thời gian này là thời gian thi hành một lệnh nào đó lâu nhất trong chuỗi lệnh - Thời gian thực hiện cấu trúc IF là thời gian lớn nhất thực hiện lệnh sau THEN... điểm: Truy xuất tuần tự 2.3.2.4 So sánh giữa danh sách liên kết và mảng Danh sách liên kết có số phần tử có thể thay đổi và không cần chỉ rõ kích thước tối đa của danh sách trước Ngược lại mảng là các cấu trúc có kích thước cố định Chúng ta có thể sắp xếp lại, thêm và xóa các phần tử khỏi danh sách liên kết chỉ với một số cố định các thao tác Với mảng các thao tác này thường tương đương với kích thước... biến đổi khi stack hoạt động Như vậy khi stack rỗng thì T=0 Một phần tử được bổ sung vào Stack thì T sẽ tăng lên một đơn vị Khi một phần tử bị loại bỏ khỏi stack thì T se giảm đi một đơn vị Có thể thấy cấu trúc lưu trữ của stack như hình sau: b Biểu diễn Stack dùng danh sách liên kết đơn Việc cài đặt stack bằng cách dùng danh sách móc nối là khá tự nhiên Chẳng hạn với danh sách móc nối đơn trỏ bởi First... hạn của bộ nhớ Stack là một danh sách liên kết được khai báo như sau: Type Tro = ^nut; Nut = record Info : element; Link : tro; End; Var Sp : Tro;{Sp trỏ đến đầu ngăn xếp} 2.4.1.3 Các thao tác a Dùng cấu trúc mảng để biểu diễn ngăn xếp - Khai báo stack Type Stack = array[1 n] of element; Var T:integer; {T là đỉnh stack, chỉ vị trí phần tử cuối cùng được lưu vào stack} S:Stack; X:element; { chú ý n là... Ứng dụng: Danh sách liên kết kép thích hợp sử dụng cho việc quản lý danh sách học sinh – sinh viên 2.4 Danh sách hạn chế 2.4.1 Ngăn xếp (Stack) 2.4.1.1 Định nghĩa Ngăn xếp (Stack) là một danh sách tuyến tính mà cả hai phép thêm vào và loại bỏ phần tử đều tiến hành 1 đầu của danh sách Như vậy phần tử nào được thêm vào sau, thì loại bỏ trước, vì vậy Stack còn gọi là danh sách LIFO (Last In First Out) Vi... Thời gian thực hiện cấu trúc IF là thời gian lớn nhất thực hiện lệnh sau THEN hoặc sau ELSE và thời gian kiểm tra điều kiện Thường thời gian kiểm tra điều kiện là O(1) - Thời gian thực hiện vòng lặp là tổng (trên tất cả các lần lặp) thời gian thực hiện thân vòng lặp Nếu thời gian thực hiện thân vòng lặp không đổi thì thời gian thực hiện vòng lặp là tích của số lần lặp với thời gian thực hiện thân vòng...Xác định độ phức tạp tính toán * Quy tắc cộng: Giả sử T1(n) và T2(n) là thời gian thực hiện của hai đoạn chương trình P1 và P2 mà T1(n) = O(f(n)); T2(n) = O(g(n)) thì thời gian thực hiện P1 rồi P2 tiếp theo sẽ là: T1(n) +... true ; p := Sp; sp := p^ Link ; Infox := p^.Info ; Dispose (p) ; end end; 4 Ứng dụng a Chuyển đổi từ số thận phân sang hệ nhị phân Thuật giải: Gọi số cần chuyển là n 1 Nếu N=0kq=0 dừng 2 While N0 do - Tính số dư của N chia cho 2:R - Gửi R vào ngăn xếp: Push(S,T,R) - Thay n:=n div 2 3 Hiển thị số nhị phân While stack không rỗng do - Lấy R từ đỉnh stack: Pop(S,T,V) - Hiển thị V: write(V) {việc chuyển ... tổng kết: Cấu trúc liệu + thuật toán = Chương trình” Cách biểu diễn tối ưu cấu trúc liệu nhớ gọi cấu trúc lưu trữ (storage structure) Có thể có nhiều cấu trúc lưu trữ cho cấu trúc liệu Cấu trúc. ..Chương 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU o0o -1.1 Khái niệm cấu trúc liệu Cấu trúc liệu (CTDL) cách tổ chức liệu toán CTDL ngôn ngữ lập trình định nghĩa trước người sử dụng định nghĩa Cấu trúc liệu... đó, liên quan đến độ phức tạp thời gian giải thuật Sự phân tích nhớ cần thiết máy tính liên quan đến độ phức tạp không gian giải thuật Sự xem xét độ phức tạp không gian gắn với cấu trúc liệu