1.節點:資料元素的儲存映像。由資料域和指標域兩部分組成。
2.鍊錶:n個節點由指標域組成乙個鍊錶。它是線性表的鏈式儲存映像,稱為線性表的鏈式儲存結構
單鏈表的結構:
typedef struct lnodelnode, *linklist //linklist 為指向結構體lnode的指標型別
status initlist_l(linklist &l)
int listempty(linklist l) else
}
status destroylist_l(linklist &l)
}
status destroylist_l(linklist &l)
l->next = null // 便利完除頭節點,其餘結點已經全部消除,將頭結點的指標域賦值為空
return ok
}
int listlength_l(linklist l)
return i
}
status getelem_l (linklist l,int i,elemtype &e)
if(!p || j>i) return error //判斷第i個元素是否存在
e=p->data //取第i個元素
return ok
}// getelem_l
lnode *locateelem_l (linklist l,elemtype e)
return p
}
status listinsert_l (linklist &l.int i, elemtype e)
s = new lnode; //生成新結點s,將結點s的資料置為e
s->data = e
s->next = p->next //將結點i-1的next賦值給插入結點
p->next = s //將插入結點賦值給i-1的next
return ok
}
status listdelete_l (linklist &l.int i, elemtype &e)
if(!(p->next)||j>i-1) return error //判斷刪除位置是否合理
q=p->next //找到第i個結點的位置
p->next = q->next //將第i+1個結點的位置賦值給i-1的next
e = q->data //儲存刪除結點的資料域
delete q //釋放結點的空間
return ok
}
1.頭插法(從最後乙個結點開始,依次將各結點插入到鍊錶的前端)
void createlist_h(linklist &l, int n)
}2.尾插法(元素插入在鍊錶尾部)
void createlist_r(linklist &l, int n)
}
由於迴圈列表中尾指標的next指向了頭指標,所以沒有null指標,在涉及遍歷的時候,其終止條件就不再非迴圈鍊錶那樣判斷p或p->next是否為空,而是判斷它們是否等於頭指標
//合併尾指標的兩個迴圈鍊錶
linklist connect(linklist ta, linklist tb)
C 資料結構 單鏈表 雙鏈表與迴圈鍊錶
注意 以下所有鍊錶均包含空的頭結點。include stdafx.h include using namespace std 節點類 class node 乙個引數的建構函式 node node nextvalue 單鏈錶類 class singlelinkedlist node p newnode...
資料結構 鍊錶之單鏈表
單鏈錶即每個節點都存在資料域和指標域 特殊節點除外 每個節點都乙個直接前驅節點和直接後繼節點 頭節點無前驅,尾節點無後繼 簡單來說就是上乙個節點的指標域中存放了下乙個節點的位址,因此可以實現層層節點依次查詢,時間複雜度為o n 這也就是相對順序表而言的缺點,但是對於頻繁的插入和刪除節點卻是相對於順序...
資料結構總結 單鏈表 迴圈鍊錶 雙向鍊錶
總體構成 頭節點 不作資料的儲存,儲存鍊錶的公共資料資訊,如 長度 另外還有,還包括頭指標,指向第乙個資料節點 資料節點 顧名思義是存資料的,鍊錶最後的節點的指標域為null 節點的構成 資料域 儲存資料元素資訊 操作流程 遍歷的流程 1.通過頭節點的指標域得到第乙個元素 2.在通過第乙個元素的資料...