2、單鏈表的應用
線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素(這組儲存單元可以是連續的,也可以是不連續的)。
對於元素 ei 來說,除了儲存其本身的資訊之外,還需要儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。這兩部分資訊組成資料元素 ei 的儲存映像,稱為結點。它包括兩個域:
資料域:儲存資料元素資訊的域;
指標域:儲存直接後繼儲存位置的域稱為指標域。
n 個結點鏈成乙個鍊錶,即為線性表的鏈式儲存結構,且每個結點中,只包含乙個指標域,故稱為線性鍊錶或單鏈表,如圖:
迴圈鍊錶是另一種形式的鏈式儲存結構。它的特點是表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。從表中任一結點出發均可找到表中其他結點。
如圖,(a) 為空表,(b)為非空表:
broken keyboard(a.k.a. beiju text),uva 11988
題目描述
你有乙個破損的鍵盤。鍵盤上的所有鍵都可以正常工作,但有時home鍵或者end鍵會自動按下。你並不知道鍵盤存在這一問題,而是專心地打稿子,甚至連顯示器都沒開啟。當你開啟顯示器之後,展現在你面前的是一段悲劇的文字。你的任務是在開啟顯示器之前計算出這段悲劇文字。
輸入包含多組資料。每組資料佔一行,包含不超過100000個字母、下劃線、字元「[」或者「]」。其中字元「[」表示home鍵,「]」表示end鍵。輸入結束標誌為檔案結束符(eof)。輸入檔案不超過5mb。對於每組資料,輸出一行,即螢幕上的悲劇文字。
樣例輸入樣例輸出問題分析
採用鍊錶(linked list)。每輸入乙個字元就把它存起來,設輸入字串是 s[1~n],則可以用 next[i] 表示在當前顯示屏中 s[i] 右邊的字元編號(即在 s 中的下標)
*在陣列中頻繁移動元素是很低效的,如有可能,可以使用鍊錶。
為了方便起見,假設字串 s 的最前面還有乙個虛擬的 s[0],則 next[0] 就可以表示顯示屏中最左邊的字元。再用乙個變數 cur 表示游標位置:即當前游標位於 s[cur] 的右邊。cur=0說明游標位於「虛擬字元」 s[0] 的右邊,即顯示屏的最左邊。
*為了方便起見,常常在鍊錶的第乙個元素之前放乙個虛擬結點。
為了移動游標,還需要用乙個變數 last 表示顯示屏的最後乙個字元是 s[last]。
**
#include
#include
const
int maxn =
100000+5
;int last, cur, next[maxn]
;//游標位於 cur 號字元的後面
char s[maxn]
;int
main()
}for
(int i = next[0]
; i!=
0; i=next[i]
)printf
("\n");
}return0;
}
資料結構 表之煉表
頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...
資料結構之鍊錶
頭結點 第乙個有效結點之前的那個結點 頭結點並不存有效資料 加頭結點的目的主要是為了方便對鍊錶的操作 頭指標 指向頭結點的指標變數 尾指標 指向尾節點的指標變數 如果希望通過乙個函式對鍊錶進行處理,只需要乙個引數 頭指標 首先要定義乙個單鏈表儲存結構 然後建立乙個空表,即初始化,我寫的這個提前設定好...
資料結構之鍊錶
鍊錶是一種基本的資料結構型別,它由乙個個結點組成。每乙個結點包括乙個資料的儲存和乙個指向下乙個結點的引用。在這個定義中,結點是乙個可能含有任意型別資料的抽象實體,它所包含的指向結點的應用顯示了它在構造鍊錶之中的作用。和遞迴程式一樣,遞迴資料結構的概念一開始也令人費解,但其實它的簡潔性賦予了它巨大的價...