1.數組和鏈表的區別,請詳細解釋。
從邏輯結構來看:
a) 數組必須事先定義固定的長度(元素個數),不能適應數據動態地增減的情況。當數據增加時,可能超出原先定義的元素個數;當數據減少時,造成內存浪費;數組可以根據下標直接存取。
b) 鏈表動態地進行存儲分配,可以適應數據動態地增減的情況,且可以方便地插入、刪除數據項。(數組中插入、刪除數據項時,需要移動其它數據項,非常繁瑣)鏈表必須根據next指針找到下一個元素
從內存存儲來看:
a) (靜態)數組從棧中分配空間, 對於程序員方便快速,但是自由度小
b) 鏈表從堆中分配空間, 自由度大但是申請管理比較麻煩
從上面的比較可以看出,如果需要快速訪問數據,很少或不插入和刪除元素,就應該用數組;相反, 如果需要經常插入和刪除元素就需要用鏈表數據結構了。
2.排序算法有哪些?< C語言總共有多少種排序法>
排序算法有很多,每種算法有不同的時間和空間復雜度,效率也有差別,那么針對使用上也有不同的場合。原則上說,數據結構是一門領域,跟語言沒有絕對的聯系,很多時候同樣的算法可以用很多種語言實現。下面列一些常見的算法:插入排序,冒泡排序,選擇排序,快速排序,堆排序,歸並排序,基數排序,希爾排序等。
3.怎么理解哈希表,哈希表是什么
摘自百度:散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表。給定表M,存在函數f(key),對任意給定的關鍵字值key,代入函數后若能得到包含該關鍵字的記錄在表中的地址,則稱表M為哈希(Hash)表,函數f(key)為哈希(Hash) 函數
4.請寫出以下算法的時間復雜度
冒泡排序法 插入排序法 堆排序法 二叉樹排序法
O(n^2) O(n^2) O(nlog2 n) 最差O(n2)平均O(n*log2n)
快速排序法 希爾排序法
最差O(n2)平均O(n*log2n) O(nlog n)不穩定
5.數據結構,二叉樹的相關知識,開銷量,為何使用二叉樹等。
在計算機科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常根的子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作二叉查找樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹(不存在出度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。
文件系統和數據庫系統一般都采用樹(特別是B樹)的數據結構數據,主要為排序和檢索的效率。二叉樹是一種最基本最典型的排序樹,用於教學和研究樹的特性,本身很少在實際中進行應用,因為缺點太明顯了(看看教科書怎么說的)。就像冒泡排序一樣,雖然因為效率問題並不實用,單不失一種教學例子的好手段。