雙鏈表的結點包括3個域,乙個是存放資料資訊的info域,另外兩個是指標域,
雙鏈表的結構定義如下
typedef struct dlink_nodednode;
雙鏈表中第乙個結點沒有前驅,它的llink域為null;最後乙個結點沒有後繼它的rlink域為null;結點中的rlink域作用和單鏈表結點的next域一樣,因此雙鏈表的一些基本操作的實現並不複雜,
dnode *init()
void display(dnode *head)else
}}
dnode *find(dnode *head,int i)
while(p && i!=j)
if(!p)
return p;
}
對於雙鏈表的插入操作,如果要在雙鏈表中q所指向的結點後插入乙個新的結點p,其中要涉及的結點有q指向的結點、p指向的結點以及q的後繼結點(q->rlink 指向的結點),要設定或修改的只有4個指標,具體要做的設定為:p的rlink的設定為q的後繼結點(q->rlink);p的llink的設定為q;q的後繼結點的前驅為(q->rlink->llink)修改為p;q的後繼結點(q->rlink)修改為p。對於特殊情形,雙鏈表同單鏈表一樣需要做特殊處理。
dnode *insert(dnode *head,datatype x,int i)
else
return head;
}q = find(head,i);
if(!q)
if(q->rlink == null)else
return head;
}
雙鏈表的刪除操作
dnode *dele(dnode *head,datatype x)
q = head;
while(q&&q->info!=x)
q = q->rlink;
if(!q)
if(q == head &&head->rlink)
if(q == head && !head->rlink)elseelse
}}
資料結構與演算法 雙鏈表
刪除結點 遍歷元素 雙鏈表的高階操作 與單鏈表一樣,我還是建議用過掌握基礎操作來拼湊成大的操作。單鏈表指標域只有乙個next指標,指向下乙個結點,這就導致了它只能從前往後訪問。為了彌補這一缺陷,我們可以往指標域裡再加入乙個指標prior,用於指向前面的結點,這樣就可以實現雙向訪問了 與單鏈表相似,建...
資料結構與演算法學習二
1 用js中object物件模擬集合set的資料結構 set集合中的資料結構 s s 即集合中的鍵 值相同。故,可令object物件中的鍵 值相同,來模擬set集合及其中的方法,如下 用js中object模擬實現集合set資料結構 es6中有set類,避免混淆這裡用set2 var set2 fun...
資料結構與演算法學習總結(二)
1.什麼是複雜度分析?1 資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2 因此需要從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3 分別用時間複雜度和空間複雜度兩個概念描述效能問題,二者統稱為複雜度。4 複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...