將線性表l=(a 0 ,a 1 ,……,a n-1 )中各元素分布在儲存器的不同儲存塊,稱為結點,通過位址或指標建立它們
之間的聯絡,所得到的儲存結構為鍊錶結構。表中元素a i 的結點形式如圖所示。
其中,結點的data域存放資料元素a i ,而next域是乙個指標,指向a i 的直接後繼a i+1 所在的結點。於是,線性表
l=( a 0 ,a 1 ,……,a n-1 )的結構如圖所示。
例 設線性表l=(趙,錢,孫,李,周,吳,鄭,王),各 元素在儲存器中的分布如圖所示。
結點型別描述
typedef int datetype;
typedef struct _node
listnode_t, *linklist;
listnode_t a;
linklist p = &a;
則結構變數a為所描述的結點,而指標變數p為指向此型別結點的指標(p的值為結點的位址),如圖
設p指向鍊錶中結點a
獲取a i ,寫作:p->data;而取a i+1 ,寫作:p->next->data.。 另外,若指標p的值為null,則它不指向任何結點,
此時取p->data或p->next是錯誤的。
• 可呼叫c c語言中malloc()函式向系統申請結點的儲存空間,例如:
• linklist p;
• p = (linklist)malloc(sizeof(listnode_t));
建立單鏈表演算法思路:依次讀入表l=(a 0 ,…,a n-1 )中每一元素a i (假設為整型),若a i ≠結束符(-1),則為a i建立 一結點,然
後插入表尾,最後返回鍊錶的頭結點指標h。
演算法描述
linklist linklist_create2(void)
header->data = 0;
header->next = null;
r = header;
while(1)
p->data = val; //存入資料
p->next = null;//
r->next = p;//r指向新的節點
r = p; //移動r到鍊錶尾部
} return header;
}
設l=(2,4,8,-1),則建表過程如下:
鍊錶遍歷
void linklist_print(linklist h)
puts("\n");
}
鍊錶查詢-按序號查詢從鍊錶的a 0 起,判斷是否為第i結點,若是則返回該結點的指標,否則查詢下一結點,依次類推。
linklist linklist_get(linklist h, int pos)
while( p->next && index < pos )
if( index == pos)
else
}
鍊錶查詢-按值查詢(定位)linklist linklist_locate(linklist h, datetype val )
return p;
}
鍊錶的插入:演算法思路:呼叫演算法getlinklist(h, i-1),獲取結點a i-1 的指標p(a i 之前驅),然後申請乙個q結點,存入x,並將
其插入p指向的結點之後。插入時的指標變化如圖
鍊錶的刪除演算法思路:同插入法,先呼叫函式linklist_get(h, i-1),找到結點a i 的前驅,然後如圖所示,將結點a i 刪除之。
else //若p及p->next所在的結點存在
}單鏈表倒置
void linklist_reverse(linklist h)
}
單鏈表的有序插入
int linklist_order_insert(linklist h, datetype val)
p->data = val;
q = h;
while(q->next && q->next->data < val)
p->next = q->next;
q->next = p;
return success;
}
單鏈表的排序
void linklist_sort(linklist h)
}
內容摘取華清創客學院培訓資料,個人水平有限,感謝華清創客學院的指導和幫助。 資料結構單鏈表
初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!2012年3月30日 於大連 include using namespace std typedef struct node linklist,node linklist makelist int n void ...
資料結構 單鏈表
今天浪費了好多時間,也許是心裡想著明天的考試吧 可自己也知道這次的考試,自己畢竟過不了了,只好等到今年11月份,想想那時自己已經大三了 還有那麼多時間嗎!很懊惱今天不知怎麼回事,感嘆環境真的可以影響乙個人,真的可以 把今天的學習筆記寫下來,沒有進行好好的整理,這回單鏈表的功能較多,操作比較散,最後乙...
資料結構 單鏈表
實現乙個單鏈表 1 查詢 查詢第index個節點 查詢指定的元素 2 插入 將指定的元素插入到第index個節點上 3 刪除 將第index個節點刪除 規律 刪除和新增元素前務必儲存兩個元素的位址引用資訊 public class mylinkedlist 記錄鍊錶結構的頭結點位址引用 privat...