Thứ tự các phần tử trong một DSTT là thứ tự của các vị trí place của chúng, được xác định bởi hàm Succ.. Số phần tử hay số vị trí của được gọi là độ dài length của.. Mặt khác hàm Suc
Trang 1KHOA CÔNG NGHỆ THÔNG TIN 841 287, 892 992
Đặc tả danh sách tuyến tính (Linear List) viết tắt DSTT)
DSTT là một dãy có thể rỗng hoặc có hữu hạn các phần tử, ký hiệu = <e1, e2, , en> Thứ tự các phần tử trong một DSTT là thứ tự của các vị trí (place) của chúng, được xác định bởi hàm Succ Nghĩa là với mọi vị trí p của một DSTT ≠ φ, ta có : ∃ k ≥ 0 sao cho p = Succk (Head (Trong đóHead ( ) chỉ vị trí đầu tiên của
Mỗi vị trí có một nội dung (content) chính là phần tử ở vị trí đó Số phần tử hay số vị trí của được gọi là
độ dài (length) của Nếu n = 0, thì = φ Mặt khác hàm Succ không xác định
ở vị trí thứ n hay Succn (Head ( )) không xác định.
Đối với các DSTT, người ta xây dựng ba phép xử lý tuần tự trên các phần tử :
• Tiếp cận (access) đến phần tử thứ k của DSTT
• Loại bỏ (delete) phần tử thứ k của DSTT
• Chèn (insert) một phần tử mới tại vị trí thứ k của DSTT
Giả sử Element là một kiểu phần tử đã được định nghĩa trước đó Kiểu trừu tượng List được định nghĩa như sau :
Type List, Place
Functions EmptyList : → List
Length : List → Int Succ : Place → Place Access : List × Int → Place Content : Place → Element Delete : List × Int → List Insert : List × Int × Element → List Preconditions
Pre Access ( : List, k : Int) = (1 ≤ k ≤ Length ( ))
Pre Delete ( : List, k : Int) = (1 ≤ k ≤ Length ( ))
Pre Insert ( : List, k : Int, e : Element) = (1 ≤ k ≤ Length ( ) + 1)
/* k = Length ( ) tương ứng với việc thêm một phần tử vào cuối DSTT */
Axioms ForAll : List, k : Int, e : Element :
Length (EmptyList) = 0
( ≠ EmptyList) and (1 ≤ k ≤ Length ( )) ⇒ Length (Delete ( , k)) = Length ( ) 1
(1 ≤ k ≤ Length ( )) ⇒ Length (Insert ( , k, e)) = Length ( ) + 1 ( ≠ EmptyList) and (1 ≤ k < Length ( )) ⇒ Succ (Access ( , k)) = Access ( ,
k + 1)
( ≠ EmptyList) and (1 ≤ k ≤ Length ( )) and (1 ≤ i ≤ k1) ⇒
Content (Access (Delete ( , k), i)) = Content (Access (i) ( ≠ EmptyList) and (1 ≤ k ≤ Length ( )) and (k ≤ i ≤ Length ( ) 1) ⇒
Content (Access (Delete ( , k), i)) = Content (Access (i 1) (1 ≤ k ≤ Length ( )) and (1 ≤ i ≤ k1) ⇒
Content (Access (Insert ( , k, e), i)) = Content (Access (i) (1 ≤ k ≤ Length ( ) 1) and (i k) ⇒ Content (Access (Insert ( , k, e), i)) = e (1 ≤ k ≤ Length ( ) 1) and (k1 ≤ i ≤ Length ( ) 1) ⇒
Content (Access (Insert ( , k, e), i)) = Content (Access ( , i 1))
TS Phan Huy Khánh 08/05/17, 5/8/2017