順序儲存結構不足的解決方案
順序儲存結構最大的缺點就是插入與刪除時需要移動大量的元素,這需要消耗一定的時間。解決方案有以下幾個:
①讓每乙個元素之間留乙個空位置。這個思路一定程度上解決插入單個元素的問題,但是相鄰元素如果插入多個元素,一樣會出現最開始遇到的問題。
②每個相鄰元素留足夠多的位置。這種思路對遍歷造成了一定程度的浪費,而且空間複雜度也增加了,並不是合適的解決方案。
③不考慮相鄰元素的位置,**有位置就將插入元素,只是讓每乙個元素知道他的下乙個元素在**,這樣所有的元素都可以通過遍歷。插入刪除也不用移動元素。只不過因為要儲存下乙個資料元素的位置,因此空間複雜度會增加。
以前在順序結構中,每個資料元素只需要儲存資料元素資訊就可以了。現在鏈式儲存結構,還要儲存它的後繼元素的儲存位址。
資料域、指標域、節點、單鏈表
為了表示每個資料元素ai與其直接後繼元素ai+1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼元素的資訊(即直接後繼元素的儲存位置)。
我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼元素位置的域稱為指標域。指標域中儲存的資訊稱為指標或鏈。這兩部分資訊組成資料元素ai的儲存映像,稱為節點(node)。
n個節點(ai的儲存映像)鏈結成乙個鍊錶,即線性表(a1,a2,...,an)的鏈式儲存結構。因為此鍊錶的每個節點中只包含乙個指標域,所以叫單鏈表。
鍊錶中第乙個節點的儲存位置叫做頭指標。
最後乙個元素不存在直接後繼元素,因此我們規定鍊錶的而最後乙個節點指標為「空」(通常用"null"或"^"符號表示)。
有時,我們為了方便對鍊錶進行操作,會在單鏈表的第乙個節點前附設乙個節點,稱為頭結點。頭結點的資料域可以不儲存資訊,也可以儲存線性表的長度等附加資訊。頭結點的指標域指向第乙個節點的指標。
線性表的單鏈表儲存結構
typedef struct node
node;
typedef struct node *linklist; /* 定義linklist */
從這個結構定義中,我們也就知道,節點由存放資料元素的資料域和存放後繼節點位址的指標域組成。假設p是指向線性表第i個元素的指標(位置是ai-1的指標域,值是ai的位置),則ai的資料域可以用p->data來表示,p->data的值是乙個資料元素,節點ai的指標域可以用p->next來表示,它的值是乙個指標,指向ai+1,即如果p->data=ai,則p-next->data=ai+1。如下圖所示。
路漫漫其修遠兮,吾將上下而求索。。。
演算法導論 初初見面
演算法聽起來很高大上,其實它的確很高大上,只要大學裡面學習計算機的肯定接觸過演算法,只是絕大數情況下我們學習的課程叫做資料結構,它包含兩部分內容 資料結構和演算法,說這個的目的是告訴大家演算法並不是女神,雖然我們都是屌絲但是演算法和我們已經很熟悉了,如果碰巧你畢業了並且如願以償的做了碼農 it狗那麼...
初見函式式程式設計
在學習 js 的過程中時常會聽到乙個名次 函式式程式設計 那麼究竟什麼是函式式程式設計,函式式程式設計又有什麼優點,這就在這篇部落格進行乙個簡單的總結吧 主要內容 首先,我們放下程式設計的概念,我們來看函式。函式的概念來自於數學,數學中的函式f x y有乙個非常重要的特點對於乙個給定的 x,有唯一的...
初涉網路程式設計
網路通訊中介軟體,目前我了解的有ice和ace兩種。下面是我個人的一些了解和學習的過程。http www.maycode.com index.php hotspot 27 clanguage 981 ace.html ace網路包的源 分析 一 給出了ace檔案目錄說明 http www.codes...