1. 程式人生 > >抽象資料結構(ADT)的介紹

抽象資料結構(ADT)的介紹

前言:
抽象資料型別(ADT(abstract data type))是一些操作的集合。抽象資料型別是數學的抽象;在ADT的定義中根本沒有涉及如何實現操作的集合。
整數,實數及布林量有與它們相關的操作,而抽象資料型別也有自己額相關操作。對於集合ADT,有並,交,測定大小,取餘等操作。

表,棧和佇列

  • 操作:
    插入,刪除,查詢…
  • 應用:
    多項式ADT(一元多項式)
    基數排序(線形時間排序)
    多重表(大學的課程註冊)

棧:

  • 操作:
    入棧,出棧
  • 應用:
    平衡符號
    字尾表示式
    函式的呼叫

佇列:

  • 操作:
    入隊,出隊
  • 應用:
    行式印表機
    買票佇列
    計算機網路訪問
    接線員的操作(大公司的傳呼)

對於大量的輸入資料,連結串列的線性訪問時間太慢,不宜使用。所以產生了另一種簡單的資料結構:樹,其大部分操作的平均執行時間為O(logN)。
定義:
定義樹的一種自然方法是遞迴的方法,一根樹是一些節點的集合。這個集合可以是空集;若非空,則一根樹由稱作根(root)的節點以及0個或多個非空的子樹T1,T2…Tn組成,這些子樹中每一棵的根都被來自根r的一條有向的邊(edge)所連線。

樹的遍歷及應用

  • 目錄結構
    設我們想列出目錄中所有檔案的名字。我們的輸出格式為:深度為di的檔案的名字將被di次跳格(tab)縮排後打印出來
staic void
listDir(DirectoryOrFile D,int Depth)
{
	if (D is a legitimate entry)
	{
		PrintName(D,Depth);
		if(D is a directory )
			for each child,C, of D
				ListDir(C,depth+1);
	}
}
void ListDirectory(DirectoryOrFile D)
{
	LsitDir(D,0)
}