1. 對於順序存儲的線性表,訪問結點和增加、刪除結點的時間復雜度為答案是O(1)和O(n)。為什麼
順序存儲可以實現「隨機存取」,因此訪問結點的時間復雜度為O(1),而插入、刪除結點由於涉及到大量移動元素,故其時間復雜度為O(n)。
用存儲結點的物理位置來體現結點之間的邏輯關系的存儲方法。在高級語言中,一塊連續的存儲空間通常可用一個數組來表示。因此,順序存儲通常用一個數據元素類型的數組來存儲。最經典的順序存儲結構是順序表,將線性結構的元素按序存放在一個數組中。
(1)鏈表增加節點訪問節點時間復雜度擴展閱讀
數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。數據的存儲結構,也稱為數據的物理結構,是數據的邏輯結構在計算機中的實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。數據的鏈式存儲結構可用鏈接表來表示。
2. 為什麼單鏈表訪問後繼結點的時間復雜度為O(1),而訪問前驅結點的時間復雜度為O(n)..請詳細的說明原因。謝
訪問後繼結點只是進行一次間接定址的操作,時間是常量,所以是O(1)。
鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息。
單鏈表中可以沒有頭結點,但是不能沒有頭指針!頭節點的引入能使鏈表對第一個元素的刪除和插入和其他元素相同,不用另外說明,使得代碼更加簡潔。
(2)鏈表增加節點訪問節點時間復雜度擴展閱讀:
獲取需要刪除的節點的上一個節點node,把node的next指向node的next的next,因為node的next節點沒有指針指向它,因此它會被系統自動清理,記錄鏈表長度的變數-1。
public AnyType remove(int i)
{
Node<AnyType> prev=getNode(i-1);
AnyType a=prev.next.data;
prev.next=prev.next.next;
thesize--;
return a;
}
3. 在一個具有n個結點的有序單鏈表中插入一個新結點並仍然保持有序的時間復雜度是為什麼是O(n)
因為單鏈表保存的信息只有表頭 如果要在特定位置插入一個節點 需要先從表頭一路找到那個節點。
數量級遞增排列,常見的時間復雜度有:
常數階O(1),對數階O( ),線性階O(n),
線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3),...,
k次方階O(n^k),指數階O(2^n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
(3)鏈表增加節點訪問節點時間復雜度擴展閱讀:
演算法復雜度分為時間復雜度和空間復雜度。其作用: 時間復雜度是指執行演算法所需要的計算工作量;而空間復雜度是指執行這個演算法所需要的內存空間。
演算法的復雜性體現在運行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即寄存器)資源,因此復雜度分為時間和空間復雜度)。
4. 在一個具有n個結點的有序單鏈表中,插入一個新結點並仍然保持有序的演算法時間復雜度是( )
在一個具有n個結點的有序單鏈表中插入一個新結點,並使其仍然有序的時間復雜性為O(n);因為單鏈表保存的信息只有表頭如果要在特定位置插入一個節點,需要先從表頭一路找到那個節點。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) +指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
(4)鏈表增加節點訪問節點時間復雜度擴展閱讀:
鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) +指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
5. 對於一個具有n個結點的單鏈表,在已知的結點*p後插入一個新結點的時間復雜度為多少為什麼
o(1),直接定位,時間復雜度為1。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) +指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
以「結點的序列」表示線性表稱作線性鏈表(單鏈表),單鏈表是鏈式存取的結構。
(5)鏈表增加節點訪問節點時間復雜度擴展閱讀:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))
鏈式存儲是最常用的存儲方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的數據結構。
6. 在一個具有n個結點的有序單鏈表中插入一個新結點並仍然有序的時間復雜度是
時間復雜度N唄 要想使插入的元素後仍然有序 最大的就是把所有節點都遍歷下. 所以是N;
7. 為什麼在單鏈表中,從頭開始遍歷,訪問後繼節點的時間復雜度為o(1),訪問前驅節點的時間復雜度為o
訪問後繼結點只要一次間接定址p = p->next,該步驟沒有循環,時間復雜度是O(1)
訪問前驅節點需要從頭結點開始根據鏈表順序一個一個訪問。該步驟有一重循環,基本運算次數與問題規模n的增長呈線性增大關系,所以時間復雜度是O(n)。
如果是雙向鏈表p = p->prior就能訪問前驅節點。
8. 對於單鏈表,在表頭插入結點的時間復雜度為___,在表尾插入結點的時間復雜度為___。
在表頭插入的時間復雜度為O(1),在表尾插入的時間復雜度為O(n)