線性表
頭指針和頭結點
頭指針:通常用來標識一個單鏈表,頭指針為NULL時表示一個空表
單鏈表第一個結點之前附加一個結點,為頭結點,指針域指向線性表的第一個元素結點。
區分:不管帶不帶頭結點,頭指針都始終指向鏈表的第一個結點,而頭結點是帶頭結點的鏈表中的第一個結點,通常不存儲信息。
如果有頭結點,頭指針就指向頭結點。
L=(LinkList)malloc(sizeof(LNode));
L為頭結點地址。
所以 帶頭結點的雙循環鏈表L為空的條件是:
L->prior==L && L->next==L
疑惑1:給定有n個元素的一維數組,建立一個有序的單鏈表的最低時間復雜度是:O(nlogn)
當一維數組有序時,時間復雜度最低,為O(n)
靜態鏈表用於需要較大儲存空間的情況(個人覺得是需要預先分配的情況下)
題目:需要分配較大空間,插入和刪除不需要移動元素的線性表,其存儲結構為:靜態鏈表
不是單鏈表的原因猜想:單鏈表動態分配內存,大概會分配堆棧空間,而靜態鏈表可以定義在外部,存放在靜態區,可以分配更大的空間
棧和隊列
棧
若一個棧的輸入序列是P1,P2,...Pn,輸出序列是1,2,3,...,n,若P3=1,則P1的值 不可能是2.
一個棧的入棧序列為1,2,3,...,n,出棧序列是P1,P2,P3,...,Pn。若P2=3,則P3可能取值的個數是 n-1
P2為3時,P1有三種可能
P1=1,P2=3,則P3=2或4...n
P1=2,P2=3,則P3=1或4...n
P1=4,P2=3,則P3=2或5...n
做並運算,得到P3可能的取值為1,2,4,5...n,共n-1個。
隊列
隊列定義中的MaxSize,為隊列中元素的最大個數。當用鏈表實現隊列且犧牲一個單元時,計算隊滿隊空等條件時,無需將MaxSize-1。
鏈式儲存結構,front->a1->a2->...->an,rear指向an。rear刪除,front插入(和鏈表箭頭順序相反)。
最適合用作鏈隊的鏈表時 帶隊首指針和隊尾指針的非循環單鏈表。(非循環單鏈表相比循環單鏈表在插入和刪除時要少操作幾次next和prior的更改)
應用
中綴表達式轉換成后綴表達式
期待討論