第一章 緒論
1、數據結構是一門研究什么的學科?
數據結構是一門研究非數值計算的程序設計問題中,計算機操作對象及對象間的關系和施加於對象的操作等的學科。
2、數據存儲結構有哪幾種類型?
存儲結構可分為順序存儲、鏈式存儲、索引存儲和散列存儲。
3、數據邏輯結構包括哪幾種類型?
邏輯結構包括線性結構和非線性結構。更細分的話可以說,邏輯結構包括集合、線性結構(線性表、棧、隊列等)、樹形結構和網狀結構。
4、數據結構與數據類型有什么區別?
答:數據結構這一術語有兩種含義,一是作為一門課的名稱,二是作為一個科學的概念,目前尚無公認定義,一般認為,數據結構包括三個方面數據的邏輯結構,數據的存儲結構,數據的運算。而數據類型是值的集合和操作的集合,可以看做是已實現了的數據結構,后者是前者的一種簡化情況。
5、數據類型和抽象數據類型是如何定義的?二者有何相同和不同之處?抽象數據類型的主要特點是什么?使用抽象數據類型的主要好處是什么?數據類型和抽象數據類型是如何定義的?二者有何相同和不同之處?抽象數據類型的主要特點是什么?使用抽象數據類型的主要好處是什么?
答:數據類型是程序設計語言中的一個概念,數據類型是值的集合和操作的集合,可以看做是已實現了的數據結構
抽象數據類型指一個數學模型及定義在該模型上的一組操作。抽象的意義在於數據類型的數學抽象特性。抽象數據類型的定義僅取決於它的邏輯特性,而與其在計算機內部如何表示與實現無關。無論其內部如何變化。只要它的數學特性不變就不影響它的外部使用。抽象數據類型和數據類型實質上是一個概念,但是抽象數據類型的范圍更廣,它已不再局限於機器已定義和實現的數據類型,還包括用戶在設計軟件系統時自行定義的數據類型。使用抽象數據類型定義的軟件模塊含定義,表示和實現三部分,封裝在一起,對用戶透明(提供接口),而不必了解實現細節。
6、名詞解釋
7、算法的時間復雜度
答:算法時間復雜度用來度量算法執行時間的多少,用大O階表示,即T(n)=O(f(n)),其中n為問題規模,也就是問題的大小
8、算法的五個重要特性
有窮性、確定性、可行性、輸入、輸出
9、評價算法好壞的依據
正確性、可讀性、健壯性、高效率和低存儲需求
第二章 線性表
1、對順序存儲結構和鏈式存儲結構,比較它們的優缺點。在什么情況下用順序表比鏈表好?
1)順序存儲時,相鄰數據元素的存放地址相鄰(邏輯與物理統一),內存中可用存儲單元的地址也連續。
優點:存儲密度大,存儲空間利用率高。缺點:插入刪除需要移動元素。
2)鏈式存儲時,相鄰元素隨意存放,存儲空間由結點值和指針兩部分組成。
優點:插入刪除方便。缺點:存儲利用率低。
在線性表長度變化不大,主要操作是查找時,采用順序表。
在線性表長度變化較大,插入刪除操作時,采用鏈表。
2、試舉一例說明對相同的邏輯結構,同一種運算在不同的存儲方式下實現,其運算效率不同。
答:線性表的插入刪除操作。在順序存儲方式下平均移動一半元素,時間復雜度為O(n),在鏈式存儲方式下,插入和刪除的時間復雜度都是O(1)。
3、說明頭指針、頭節點、首元結點的概念
頭指針是指向鏈表中第一個結點(或頭節點或首元結點)的指針。
頭節點是在鏈表的首元結點之前附加的一個結點,頭結點是為了操作的統一方便而設立的。數據域一般無意義,只放空表標志和表長等信息。
首元素結點是指鏈表中存儲線性表中第一個元素結點。
3、簡述順序存儲隊列假溢出的避免方法及隊滿和空的條件。
答:避免方法:一是將隊列元素向前“平移”(占用0至rear -front 1);二是將隊列看成首尾相連,即看做循環隊列(0...m-1)。
在循環隊列下,定義front=rear時為隊空,而判斷隊滿則常用兩種方法:一種是用 “犧牲一個單元” ,即rear+1=front (准確說是(rear+1) %m= =front 時,m是隊列容量)時為隊滿:另一種方法是 “設標記”,如設標記tag, tag=0時為隊空: tag=1時,若因插人導致front=rear 則為隊滿。
第三章 棧和隊列
1、棧、隊列的名詞解釋。兩者之間的聯系與區別。
棧是只允許在一端進行插入和刪除操作的線性表,允許插入和刪除的端叫棧頂,另一端叫棧底。最后插入的元素最先刪除,故棧也稱后進先出表。
隊列是允許在一端插入而在另一端刪除的線性表,允許插入的一端叫隊尾, 允許刪除的端叫隊頭。最先插入隊的元素最先離開(刪除),故隊列也常稱先進先出表。
棧與隊列都是操作受限的線性表,只允許在端點插入刪除。都可通過順序結構和鏈式結構實現。插入刪除時間復雜度都為O(1)。
棧只允許在棧頂插入刪除,隊列在隊頭刪除隊尾插入。
2、棧和隊列的應用有?
棧:表達式的轉換和求值、函數調用和遞歸實現、深度優先搜索遍歷
隊列:計算機系統中各種資源的管理、消息緩沖器的管理、廣度優先搜索遍歷
2、什么是遞歸程序?
一個函數在結束本函數前,直接或間接調用函數自身,稱為遞歸。
遞歸程序的優點是程序結構簡單、清晰,易證明其正確性。缺點是執行中占內存空間較多,運行效率低。
遞歸程序執行中需要借助棧這種數據結構來實現。
遞歸程序的入口語句和出口語句一般用條件判斷語句來實現。遞歸程序有基本項和歸納項組成。
第四章 串
1、什么是串?
串是零個至多個字符組成的有限序列。從數據結構角度講,串屬於線性結構。與線性表的特殊性在於串的元素是字符。
2、描述一下概念的區別:空格串和空串
空格是一個字符,其ASCII碼值是32。空格串是用空格組成的串,其長度等於空格的個數。
空串是不含任何字符的串,即空串的長度是零。
第五章 數組和廣義表
1、什么是廣義表?廣義表與線性表的區別
線性表中的元素可以是各種各樣的,但必須具有相同的性質,屬於同一數據對象。
廣義表中的元素可以是元素也可以是子表。
2、試敘述一維數組和有序表的異同
一維數組屬於特殊的順序表,和有序表的差別主要在於有序表中的元素按值排序(非遞增或非遞減),而一維數組中元素沒有按元素值排列順序的要求。
第六章 樹與二叉樹
1、樹與二叉樹的區別和聯系?
樹與二叉樹是兩種不同的數據結構,在邏輯上都是樹形結構,區別主要有:
一是二叉樹的度至多為2,樹無此限制;
二是二叉樹有左右子樹之分,即使在只有一個分枝的情況下,也必須指出是左子樹還有右子樹,樹無此限制;
三是二叉樹允許為空,樹一般不允許為空。
第七章 圖
1、完全圖
也叫簡單完全圖,假設一個圖有n個頂點,那么如果任意兩個頂點之間都有邊的話,該圖就稱為完全圖。
2、連通、連通分量、強連通分量的概念,極大連通子圖?極小連通子圖?
在無向圖中,若從頂點v到頂點w有路徑存在,則稱v和w是連通的。圖中任意兩點是連通的,則稱圖G為連通圖。無向圖中的極大連通子圖稱為連通分量。
有向圖中,若v到w和w到v都有路徑存在,則稱這兩個點是強連通的。任一對頂點都是強連通的,則此圖為強連通圖。有向圖中的極大強連通子圖稱為有向圖的強連通分量。
極大是要求該連通子圖包含其所有的邊(暗指無向圖),亦為連通分量。
極小是在保持連通的情況下使邊數最少的子圖(暗指無向圖),亦為最小生成樹。
3、對一個圖進行遍歷可以獲得不同的遍歷序列,那么導致得到不同遍歷序列不唯一的因素有哪些?
遍歷不唯一的因素有:開始遍歷的結點不同;存儲結構不同;在鄰接表情況下鄰接點的順序不同。
4、在什么情況下,Prim算法和Kruskual算法生成不同的最小生成樹MST?
在有相同權值邊時生成不同的MST,在這種情況下,用Prim算法或Kruskual算法會產生不同的MST。
6、Prim算法和Kruskual算法區別
Prim算法是加點法,適合邊稠密圖;Kruskual算法是一種按權值的遞增次序選擇合適邊來構造生成樹的加邊法,適合邊稀疏而頂點較多的圖。
第八章 查找
1、散列表存儲的基本思想是什么?
散列表的基本思想是用關鍵字的值決定數據元素的存儲地址
2、散列表存儲中解決碰撞的基本方法有哪些?
a、開放定址法 根據di的取值又分為線性探測再散列、二次探測再散列、偽隨機探測再散列
b、再散列法
c、鏈地址法
d、建立公共溢出區
3、如何衡量hash函數的優劣?
能否將關鍵字均勻映射到哈希空間上,有無好的解決沖突的方法,計算哈希函數是否簡單高效。由於哈希函數是壓縮映像,沖突難以避免。
4、在查找算法中,設置監視哨的作用是什么?
監視哨的作用是免去查找過程中每次都要檢測整個表是否查找完畢,提高了查找效率。
5、對於一個有序順序表來說,折半查找是否任何時候比順序查找快?為什么?
答:並非在任何情況下折半查找都比順序查找快。例如,若待查元素是該順序表的第一個元素,則順序查找順序表會更快。對有序順序表采用順序查找,若元素存在表中,則在任一位置,查找都可能成功。同樣,若元素不在表中,則在任一位置, 查找都可能結束。折半查找必須經一-系列計算,方知查找成功還是失敗。盡管如此,一般說來,在大多數情況下,折半查找還是比順序查找快。
第九章 內部排序
1、排序穩定性的概念
假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,則稱這種排序算法是穩定的。
2、穩定排序有哪些?不穩定排序有哪些?
穩定排序:直接插入排序、冒泡排序、歸並排序、基數排序
不穩定排序:選擇排序、希爾排序、快速排序、堆排序
3、快速排序是在所有情況下,排序速度最快的嗎?為什么?
不是,因為當序列已有序時,快速排序退化成了冒泡排序,時間復雜度為O(n2)。
當待排序列無序,使每次划分完成后,樞軸(pivot)兩側子文件長度相當,此時快速排序性能最好。
4、
比較次數 與序列初態 無關 的算法是:二路歸並排序、簡單選擇排序、基數排序
比較次數 與序列初態 有關 的算法是:快速排序、直接插入排序、冒泡排序、堆排序、希爾排序
5、簡述堆的結構
堆是一種特殊的完全二叉樹,所有父結點都比子結點要小的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆。
第十章 文件
1、文件是由大量性質相同的記錄組成的集合、按記錄類型不同分為操作系統文件和數據庫文件。
2、文件存儲結構的基本形式有哪些?
文件基本組織方式有順序組織、索引組織、散列組織和鏈組織。
文件的存儲結構可以采用將基本組織結合的方法,常用的結構有順序結構、索引結構、散列結構。