數據結構
第一章:緒論
1.數據存儲結構包括哪幾種類型?數據邏輯結構包括哪幾種類型?
存儲結構包括順序存儲、鏈式存儲、索引存儲、散列存儲。
邏輯結構包括線性結構,
非線性結構(集合、樹形結構、圖形(網狀)結構)
2.數據結構是一門研究什麼內容的學科?
數據結構是一門研究在非數值計算的程序設計問題中,計算機的操作對象及對象間的關係和施加於對象的操作等的學科。
3.數據元素之間的關係在計算機中有幾種表示方法?各有什麼特點?
四種表示方法:
- 順序存儲方式
數據元素順序存放,每個存儲結點只含一個元素。存儲位置反映數據元素間的邏輯關係。存儲密度大,但有些操作(如插入、刪除)效率較差。
- 鏈式存儲方式
每個存儲結點除包含數據元素信息外還包含一組(至少一個)
指針。指針反映數據元素間的邏輯關係。這種方式不要求存儲空間連續,便於動態操作(如插入、刪除等),但存儲空間開銷大(用於指針),另外不能折半查找等。
- 索引存儲方式
除數據元素存儲在一地址連續的存儲空間外,尚需建立一個索引表,索引表的索引項指示存儲結點的存儲位置(下標)或存儲區間端點(下標,非稠密索引),兼有靜態和動態特性。
- 散列存儲方式
利用散列函數和解決衝突的方法,將關鍵字散列在連續的有限的地址空間內,並將散列函數的值解釋成關鍵字所在元素的存儲地址。其特點是存取速度快,只能按關鍵字隨機存取,不能順序存取,也不能折半存取。
4.數據類型和抽象數據類型是如何定義的?二者有何相同和不同之處?抽象數據類型的主要特點是什麼?使用ADT的主要好處是什麼?
“數據類型”是程序設計語言中的一個概念,它是一個值的集合和操作的集合,如C語言中的整型、實型、字符型等。整型值(對具體機器都應有整數範圍)的操作有加、減、乘、除、求餘等。實際上,數據類型是廠家提供給用戶的已實現了的數據結構。
“ADT”是指一個數學模型及定義在該模型上的一組操作。“抽象”的意義在於數據類型的數學抽象特性。抽象數據類型的定義僅取決於它的邏輯特性,而與其在計算機內部如何表示和實現無關。無論其內部結構如何變化,只要它的數學特性不變就不影響它的外部使用。
抽象數據類型和數據類型實質上是一個概念,但是抽象數據類型的範圍更廣,它已不再侷限於機器已定義和實現的數據類型,還包括用戶在設計軟件系統時自行定義的數據類型。
使用抽象數據類型定義的軟件模塊含定義、表示、實現三部分,封裝在一起,對用戶透明(提供接口),而不必瞭解實現細節。
抽象數據類型的出現使程序設計不再是“藝術”,而是向“科學”邁進了一步。
5.
- 在數據結構課程中,數據的邏輯結構、數據的存儲結構、數據的運算之間存在着什麼關係?
數據的邏輯結構反映數據元素之間的邏輯關係(即數據元素之間的關聯方式或“鄰接關係”)。
數據的存儲結構是數據結構在計算機中的表示,包括數據元素的表示及其關係的表示。
數據的運算是對數據定義的一組操作,運算是定義在邏輯結構上的,和存儲結構無關,而運算的實現則依賴與存儲結構。
- 若邏輯結構相同但存儲結構不同,則爲不同的數據結構。這樣的說法對嗎?舉例說明。
邏輯結構相同但存儲結構不同,可以是不同的數據結構。
例如:線性表的邏輯結構屬於線性結構,採用順序存儲結構爲順序表,而採用鏈式存儲結構稱爲線性鏈表。
- 在給定的邏輯結構及其存儲表示上可以定義不同的運算集合,從而得到不同的數據結構。這樣的說法對嗎?舉例說明之。
對,棧和隊列的邏輯結構相同,其存儲表示也可相同(順序存儲和鏈式存儲),但由於其運算集合不同而稱爲不同的數據結構。
- 評價各種不同數據結構的標準是什麼?
數據結構的評價非常複雜,可以考慮兩個方面:
一是所選數據結構是否準確、完整地刻畫了問題的基本特徵;
二是是否容易實現(如對數據分解是否恰當;
邏輯結構的選擇是否適合於運算的功能,
是否有利於運算的實現;
基本運算的選擇是否恰當)
6.評價一個好的算法,你是從哪幾個方面來考慮的?
評價好的算法有四個方面:
一:算法的正確性
二:算法的易讀性
三:算法的健壯性
四:算法的時空效率(效率與低存儲量需求)
7.解釋和比較一下各組概念:
- 算法的時間複雜性
算法的時間複雜性是算法輸入規模的函數。
算法的輸入規模或問題的規模是作爲該算法輸入的數據所含數據元素的數目,或與此數目有關的其他參數。有時考慮算法在最壞情況下的時間複雜度或平均時間複雜度。
- 算法
算法是對特定問題求解步驟的描述,是指令的有限序列,其中每一條指令表示一個或多個操作。算法具有五個重要特性:有窮性、確定性、可行性、輸入和輸出。
- 頻度
在分析算法時間複雜度時,有時需要估算基本操作的原操作,它是執行次數最多的一個操作,該操作重複執行的次數稱爲頻度。
8.數據結構與數據類型有什麼區別?
“數據結構”這一術語有兩種含義:一是作爲一門課程的名稱;二是作爲一個科學的概念。作爲科學概念,目前尚無公認定義,一般認爲,討論數據結構要包括三個方面,數據的邏輯結構、數據的存儲結構、數據的運算。
“數據類型”是值的集合和操作的集合,可以看作是已實現了的數據結構,後者是前者的一種簡化情況。
9.請簡要列出影響一個算法(或程序)時間效率的主要因素,並指出其中與算法(或程序)本身直接有關的因素。
事先估算算法運行時間主要考慮問題的“規模”和算法執行的“基本操作”的次數。
問題的“規模”指待解決問題的數量,如查找中元素的個數,元素個數越多,查找需要的時間越長,這是影響算法運行時間的主要因素。
“基本操作”是算法在解決某問題時的主要操作,如在查找運算中元素間的比較操作可以看作是基本操作,執行基本操作的次數越少,運行時間越短,執行基本操作的次數越多,運行時間就越長。