抽象數據類型(ADT)是一種只能通過接口訪問的數據類型,它是字段與基于字段的操作所構成的集合。這里的接口不是interface,而是訪問數據的途徑,接口把數據的表示和操作方法的實現完全分離開來。兩種最基本的ADT是堆棧和隊列,并且根據我們的需要,可以構建更為復雜的ADT,例如可以對數據項進行計數,檢查數據項是否存在重復等等。
在很多實際應用中,我們都不允許存在數據項重復的情況,需要對用戶提交的重復數據進行合適的處理。讓用戶保證不提交重復的數據可以避免這種情況的發生,但顯然這種方法并不實際,既然使用ADT就是為了給使用它的程序員提供簡單明了的數據類型解決方案,那么我們就應該在ADT中來解決這個問題。以隊列為例,一般可以通過兩種策略來處理這個問題:
1. 放棄新輸入的數據項:當最新放入隊列中的數據項已經在隊列中時,放棄當前輸入的數據項。
2. 放棄舊的數據項,保存新輸入的數據項:當最新放入隊列中的數據項已經在隊列中時,放棄已經存在于隊列中的數據項,保存當前放入的數據項。
對于第一種處理方式,在一種特殊的情況下,數據項存儲的數據是0~N-1之間的整數,那么可以通過增加一個新的數組a[i]或鏈表來儲存boolean類型數據,當隊列中第i個位置上已經存在數據i時(i<=N-1),設置a[i]=boolean,那么可以通過a[i]來判斷數據i是否已經存在于隊列中。第二種處理方式比第一種更為復雜一些,如果有必要,還可以讓用戶去選擇采取哪種策略來避免重復的數據項。但不管怎么樣,我們可以通過構建不同類型的ADT,并在ADT中實現某些我們所需要的功能,將能極大限度地保證數據結構和算法的靈活性與清晰的結構,使基于ADT的實現能滿足各種不同的具體應用,并方便類的重構。