抽象數據類型的定義怎麼寫 - 一般情況下,抽象數據類型都可以怎樣定義

來源:趣味經驗館 2.51W
1.一般情況下,抽象數據類型都可以怎樣定義

首先什麼是抽象數據類型,抽象數據類型泛指除基本數據類型以外的數據類型。什麼叫類型?就是一類數據。基本數據類型被認做是最基本地,不可再劃分的數據,一般就是整形、浮點型、以及字符型。抽象數據類型是由若干基本數據類型歸併之後形成的一種新的數據類型,這種類型由用户定義,功能操作比基本數據類型更多,一般包括結構體和類。其實説白了,抽象數據類型就是把一些有一定關聯的基本數據類型打包,然後當做新的數據類型使用。

抽象數據類型的定義怎麼寫 一般情況下,抽象數據類型都可以怎樣定義

由上可知,我認為抽象數據類型的定義方法就是結構體和類的定義方法。

2.怎樣寫一個抽象數據類型

template 這是定義類模版

因為C語言的函數參數傳遞需要指定確定類型才行。這樣在編寫程序過程就比較麻煩。比如

要寫一個兩個數相加的函數 int add(int a,int b),可以看到,這個函數只支持int 類型,float,double等類型就不能用這個函數了,只能再寫一個 float addf(float a,float b)。這樣代碼的重用性能不好。

到了C++就有模版的出現了

就是定義一個模版,傳入參數類型是不定時,就可以定義為模版。

你的代碼就是了,template class T是任意的類型。

這樣需要説明的是,模版的類型轉換過程是發生在編譯之前,也就是預編譯,預編譯跟預處理不同,預處理純粹是編譯前宏代碼的替換,預編譯是開始編譯後,對一些模版類型進行調整生成中間代碼,當然還有其它一些工作。

當編譯成目標文件後,模版在定義變量賦了什麼類型就是什麼類型了

3.抽象數據類型定義有哪些內容

抽象數據類型 與機器語言、彙編語言相比,高級語言的出現大大地簡便了程序設計。

但算法從非形式的自然語言表達到形式化的高級語言表達,仍然是一個複雜的過程,仍然要做很多繁雜瑣碎的事情,因而仍然需要抽象。 對於一個明確的數學問題,設計它的算法,總是先選用該問題的一個數據模型。

接着,弄清該問題所選用的數據模型在已知條件下的初始狀態和要求 的結果狀態,以及隱含着的兩個狀態之間的關係。然後探索從數據模型的已知初始狀態出發到達要求的結果狀態所必需的運算步驟。

把這些運算步驟記錄下來,就是 該問題的求解算法。 按照自頂向下逐步求精的原則,我們在探索運算步驟時,首先應該考慮算法頂層的運算步驟,然後再考慮底層的運算步驟。

所謂頂層的運算步驟是指定義在數 據模型級上的運算步驟,或叫宏觀運算。它們組成算法的主幹部分。

表達這部分算法的程序就是主程序。其中涉及的數據是數據模型中的一個變量,暫時不關心它的 數據結構;涉及的運算以數據模型中的數據變量作為運算對象,或作為運算結果,或二者兼而為之,簡稱為定義在數據模型上的運算。

由於暫時不關心變量的數據結 構,這些運算都帶有抽象性質,不含運算的細節。所謂底層的運算步驟是指頂層抽象的運算的具體實現。

它們依賴於數據模型的結構,依賴於數據模型結構的具體表 示。因此,底層的運算步驟包括兩部分:一是數據模型的具體表示;二是定義在該數據模型上的運算的具體實現。

我們可以把它們理解為微觀運算。於是,底層運算 是頂層運算的細化;底層運算為頂層運算服務。

為了將頂層算法與底層算法隔開,使二者在設計時不會互相牽制、互相影響,必須對二者的接口進行一次抽象。讓底 層只通過這個接口為頂層服務,頂層也只通過這個接口調用底層的運算。

這個接口就是抽象數據類型。其英文術語是Abstract Data Types,簡記ADT。

抽象數據類型是算法設計和程序設計中的重要概念。嚴格地説,它是算法的一個數據模型連同定義在該模型上、作為該算法構件的一組運算。

這個概念明確地 把數據模型與作用在該模型上的運算緊密地聯繫起來。 事實正是如此。

一方面,如前面指出過的,數據模型上的運算依賴於數據模型的具體表示,因為數據模型上的 運算以數據模型中的數據變量作為運算對象,或作為運算結果,或二者兼而為之;另方面,有了數據模型的具體表示,有了數據模型上運算的具體實現,運算的效率 隨之確定。 於是,就有這樣的一個問題:如何選擇數據模型的具體表示使該模型上的各種運算的效率都儘可能地高?很明顯,對於不同的運算組,為使組中所有運算 的效率都儘可能地高,其相應的數據模型具體表示的選擇將是不同的。

在這個意義下,數據模型的具體表示又反過來依賴於數據模型上定義的那些運算。 特別是,當 不同運算的效率互相制約時,還必須事先將所有的運算的相應使用頻度排序,讓所選擇的數據模型的具體表示優先保證使用頻度較高的運算有較高的效率。

數據模型 與定義在該模型上的運算之間存在着的這種密不可分的聯繫,是抽象數據類型的概念產生的背景和依據。 應該指出,抽象數據類型的概念並不是全新的概念。

它實際上是我們熟悉的基本數據類型概念的引伸和發展。用過高級語言進行算法設計和程序設計的人都知 道,基本數據類型已隱含着數據模型和定義在該模型上的運算的統一,只是當時還沒有形成抽象數據類型的概念罷了。

事實上,大家都清楚,基本數據類型中的邏輯 類型就是邏輯值數據模型和或(∨)、與(∧)、非(┐)三種邏輯運算的統一體;整數類型就是整數值數據模型和加(+)、減(-)、乘(*)、除(div) 四種運算的統一體;實型和字符型等也類同。每一種基本類型都連帶着一組基本運算。

只是由於這些基本數據類型中的數據模型的具體表示和基本運算的具體實現都 很規範,都可以通過內置(built-in)而隱蔽起來,使人們看不到它們的封裝。許多人已習慣於在算法與程序設計中用基本數據類型名和相關的運算名,而 不問其究竟。

所以沒有意識到抽象數據類型的概念已經孕育在基本數據類型的概念之中。 回到定義算法的頂層和底層的接口,即定義抽象數據類型。

根據抽象數據類型的概念,對抽象數據類型進行定義就是約定抽象數據類型的名字,同時,約定在 該類型上定義的一組運算的各個運算的名字,明確各個運算分別要有多少個參數,這些參數的含義和順序,以及運算的功能。 一旦定義清楚,算法的頂層就可以像引 用基本數據類型那樣,十分簡便地引用抽象數據類型;同時,算法的底層就有了設計的依據和目標。

頂層和底層都與抽象數據類型的定義打交道。頂層運算和底層運 算沒有直接的聯繫。

因此,只要嚴格按照定義辦,頂層算法的設計和底層算法的設計就可以互相獨立,互不影響,實現對它們的隔離,達到抽象的目的。 在定義了抽象數據類型之後,算法底層的設計任務就可以明確為: 賦每一個抽象數據類型名予具體的構造數據類型,或者説,賦每一個抽象數據類型名予具體的數據結構; 賦每一個抽象數據類型上的每個運算名予具體的運算內容,或者説,賦予具。

4.仿照三元組的抽象數據類型分別寫出抽象數據類型複數的定義

1.1

試仿照三元組的抽象數據類型分別寫出抽象數據類型複數的定義。

1.2

n

為正整數,試確定下列各程序段中前置以記號

#

的語句的頻度。

1.

i=1;k=0;

While (i{ #

k+=10*i;

i++;}

2.

i=1;k=0;

do { #

k+=10*i;

i++;} While (i3. i=1;k=0;

While (i{ i++;

#

k+=10*i; }

4. k=0;

for(i=1;i

{ for(j=i;j# k++;

}

5. for(i=1;i

for(j=1;j

for(k=1;k# x+=delta;;

6. i=1;j=0;

While (i+j{ # if (i>j)

j++;

else i++; }

7. x=n; y=0;

While (x>=(y+1)*(y+1))

{ #

y++; }

8. x=91; y=100;

While (y>0)

{ #

if (x>100) { x-=10; y--; }

else x++;

}

1.3

試寫一算法,自大至小依次輸出順序讀入的三個整數

X

Y

Z

的值

熱門標籤