線性表一定是順序存儲的嗎
1. 線性表的存儲結構
你好像把數據的邏輯結構與存儲結構搞混淆了。
數據的邏輯結構包括線性結構、樹、圖、集合這四種,在線性結構裡面又有線性表、棧、隊列等等。
而數據的存儲結構只有兩種:順序存儲結構和鏈式存儲結構,這兩種存儲結構,前面一個是利用數據元素在存儲器中的相對位置表示其邏輯結構,另外一個是用指針來表示其邏輯關系。
結論:
線性結構的數據在存儲結構方面,既可能是順序存儲,也可能是鏈式存儲。
線性表是線性結構,也是順序存儲結構。
2. 每一次比較都使搜索范圍減少一半的方法是()。
每一次比較都使搜索范圍減少一半的方法是二分查找。
折半查找法也稱為二分查找法,它充分利用了元素間的次序關系,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。
它的基本思想是:(這里假設數組元素呈升序排列)將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,演算法終止;如 果x<a[n/2],則我們只要在數組a的左半部繼續搜索x;如果x>a[n/2],則我們只要在數組a的右 半部繼續搜索x。
3. 二分查找演算法
二分查找演算法,該演算法要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。如果一個序列是無序的或者是鏈表,那麼該序列就不能使用二分查找。
二分查找演算法原理:若待查序列為空,則返回-1,並退出演算法;若待查序列不為空,則將它的中間元素與目標數值進行比較,判斷是否相等;若相等,則返回中間元素索引,並退出演算法;此時已查找成功。若不相等,則比較中間元素與目標數值的大小。
二分查找的一個技巧是:不要出基升亮現else,而是把所有情況用else,if寫清楚,這樣可以清楚地展現所有細節。本文都會使用else,if,旨在講清楚搏寬,讀者理解後可自行簡化。