日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-线性结构

發布時間:2024/7/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-线性结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.線性結構

1.順序線性表

1.1 線性結構是一種基本的數據結構,具有單一前驅后繼的數據關系描述。
1.2 線性表的存儲結構分為順序存儲和鏈式存儲
1.3 順序線性表的元素間的邏輯關系無需占用額外的空間來存儲。
1.4 一般地,以LOC(a1a_1a1?)表示線性表中第一個元素的存儲位置,在順序存儲結構中,第i個元素aia_iai?的存儲位置為
LOC(ai)=LOC(a1)+(i?1)?LLOC(a_i) = LOC(a_1) + (i-1)*L LOC(ai?)=LOC(a1?)+(i?1)?LL表示表中每個元素所占用空間的字節數。

1.5 順序線性表的優點是可以隨機存儲表中的元素,缺點是插入和刪除元素需要移動元素。

1.6插入刪除操作需要移動元素個數的期望值
(1) 在長度為的線性表中插入元素時,共有n+1個插入位置,在位置1處插入元素需要移動n個元素,在n位置處插入元素,需要移動一個元素,則可知在**位置i處插入元素,需要移動的元素個數為n+1 - i,**假設在n+1個位置插入元素的概率相等,則概率為:
1n+1\frac{1}{n+1} n+1?則插入元素的期望為
Einsert=∑i=1n+11n+1(n+1?i)=n2E_{insert} = \displaystyle\sum_{i=1}^{n+1} \frac{1}{n+1}(n+1 - i) = \frac{n}{2} Einsert?=i=1n+1?n+1?(n+1?i)=2n?

(2) 刪除元素時,有n個元素可刪除的元素,刪除第i個元素需要移動的元素個數為n-i,則期望為:
Edelete=∑i=1n1n(n?i)=n?12E_{delete} = \displaystyle\sum_{i=1}^{n} \frac{1}{n}(n - i) = \frac{n-1}{2} Edelete?=i=1n?n?(n?i)=2n?1?

1.7 因此,插入和刪除的時間復雜度為O(n)。

2.鏈式線性表

2.1 通過指針域來存儲元素之間的邏輯關系,若節點中只有一個指針域,則稱為線性鏈表,具有插入和刪除元素不需要移動元素的優點。
2.2 在單鏈表中,在p所指節點后面插入新節點:

s->next = p->next; p->next = s

2.3 在單鏈表中刪除p所指節點的后繼節點:

q = p->next;//記住需要刪除的節點,用于其釋放內存 p->next = p->next->next; free(q);


插入,刪除節點都需要從插入或刪除的節點入手,結合圖中所示,書寫首尾銜接,方便快速寫出正確的代碼。

2.4 在實際應用中,為了簡化對鏈表狀態的判定和處理,特別引入一個不存儲數據元素的節點,稱之為頭節點,將其作為鏈表的第一個節點并令頭指針指向該節點。

2.5 雙向鏈表,具有連個指針域,分別指出當前元素的直接前驅和直接后繼。循環鏈表,在單鏈表的基礎上,令表尾節點的指針指向鏈表的第一個節點。注意區分兩者的區別。

2.6 雙向鏈表的刪除和插入操作,front表示前驅,next表示后繼。

在p節點之前插入節點s:

s->front = p->front; p->front->next = s; s->next = p; p->front = s;

刪除節點p:

p->front->next = p->next; p->next->front = p->front; free(p);

3. 棧和隊列

3.1 在棧中進行插入和刪除操作的一端稱為棧頂。
3.2 棧的存儲結構:順序存儲和鏈式存儲。采用順序存儲結構的棧稱為順序棧,在這種存儲方式下,需要預新申請棧的存儲空間。
3.3 棧的典型應用包括表達式求值括號匹配等,其次將遞歸過程轉換成非遞歸過程,也需要利用棧來實現。

3.4 在對隊列中,允許插入元素的一端稱為隊尾(Rear),允許刪除元素的一端稱之為隊頭(Front)。順序存儲的隊列,可以通過求余運算來實現環狀結構。
元素入隊和元素出隊列;

Q.rear = (Q.rear +1) % MAXSIZE;// 采用下標加1的方式表示入隊和出隊 Q.front = (Q.front +1) % MAXSIZE;

3.5 當頭指針和為指針相等時,表示隊列為空,當尾指針的下一個位置為頭指針是表示隊列滿,或者設置一個隊列滿的標志是區分隊列的空與滿。

3.6 鏈式隊列,采用給隊列添加一個頭節點,并令頭指針指向該節點。因此,當頭指針與位置的值相等且均指向頭結點表示隊列空。
3.7 隊列主要用于需要排隊的場合,以及離散事件的計算機模擬等。

4.串的模式匹配

4.1 樸素的模式匹配算法:基本思想是從主串的第一個字符與模式串的第一個字符比較,若相等,則逐一對字符串進行后續的比較,否則從主串第二個字符與模式串的第一個字符重新比較,直到匹配成功或則失敗。

4.2 模式匹配的算法時間復雜度
(1) 假設主串和模式串長度分別為n和m,下表從0開始,假設從主串的第i個位置匹配成功,且在前i趟中都是模式串的第一個字符與主串匹配失敗,字符比較次數為i,而第i+1趟成功匹配字符的比較次數為m,總的字符比較次數為i+ m(0<=i<=n-m),若在n-m個位置上匹配成功的概率相同,即
1n?m+1\frac{1}{n-m+1} n?m+1?
則,匹配成功時字符的平均比較次數為:
1n?m+1∑i=0n?m(i+m)=n+m2\frac{1}{n-m+1} \displaystyle\sum_{i=0}^{n-m} (i+m) = \frac{n+m}{2} n?m+1?i=0n?m?(i+m)=2n+m?
因此,在最好情況下匹配算法的時間復雜度為O(n+m)

(2)假設最壞情況下,每次匹配不成功都是模式串的最后一個字符不匹配,則前i趟中字符比較了i×m次,第i+1趟也比較了m次,則:
∑i=0n?mm(i+1)n?m+1=12m(n?m+2)\displaystyle\sum_{i=0}^{n-m}\frac{m(i+1)}{n-m+1} = \frac{1}{2}m(n-m+2) i=0n?m?n?m+1m(i+1)?=21?m(n?m+2)
因此,在最壞情況下匹配算法的時間復雜度為O(n×m)

5.矩陣的壓縮存儲

5.1 n階對稱矩陣,aija_{ij}aij?=ajia_{ji}aji?,可將n2n^2n2個元素壓縮存儲到n(n+1)2\frac{n(n+1)}{2}2n(n+1)?個元素的存儲空間。
采用為主序存儲下三角包括對角線中的元素在數組A中,則A [k]與矩陣元素aija_{ij}aij?之間的一一對應關系為:
k={i(i?1)2+ji?>=?jj(j?1)2+i,i?<?jk = \begin{cases} \frac{i(i-1)}{2}+j & \text {i >= j} \\ \frac{j(j-1)}{2}+i , & \text{i < j} \end{cases} k={2i(i?1)?+j2j(j?1)?+i,?i?>=?ji?<?j?

總結

以上是生活随笔為你收集整理的数据结构-线性结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。