當前位置:生活全書館 >

綜合知識

> 一般情況下,抽象資料型別都可以怎樣定義 抽象資料型別的定義怎麼寫

一般情況下,抽象資料型別都可以怎樣定義 抽象資料型別的定義怎麼寫

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

的值

標籤: 抽象資料型別
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/lyp8yn.html