概述:線性表的鏈式儲存結構稱為鍊錶,其中每個節點不僅包含元素本身資訊,而且包含標識元素之間的邏輯關係的資訊,在c/c++中常用指標來實現,這稱為指標域。
順序表中邏輯上相鄰元素對應的儲存位置也相鄰,所以執行插入刪除操作時候平均需要移動半個表的元素,而鍊錶不同,邏輯上相鄰元素對應的儲存位置不一定相鄰,它是通過指標來連線的,因此儲存位置可以隨意安排。
由於順序表的直接對映,即查詢第i個元素時對應的時間複雜度為o(1),而鍊錶不具有隨機訪問特性
此外順序表儲存密度較高,儲存密度即節點中資料元素本身所佔的儲存量和整個結點所佔的儲存量之比。一般情況儲存密度越大,儲存空間利用率越高,而線性表儲存密度為1,而鍊錶小於1
1.插入刪除操作(秉持先右後左思路)
2.刪除操作
3.頭插法建立單鏈表
特點:每次新結點是在頭結點之後插入,以此類推
void createa(linknode*&l, elemtype a, int n)
}
若a包含元素1、2、3、4則在鍊錶中順序為4、3、2、1
4.尾插法建立
特點,每次都在鍊錶尾端插入元素,與頭插不同的是需要在尾部指定乙個指標,並隨著插入節點增多依次往後移動,永遠指向尾部結點。
void createb(linknode*&l, elemtype a, int n)
r->next=null;
}
1.初始化線性表
void initlist(linknode*&l)
2.銷毀線性表
此地方要注意建立乙個前驅指標,用於完成節點刪除工作
void destorylist(linknode*&l)
free(pre);
}
3.判斷是否為空表
直接判斷頭結點下乙個是否為null
4.求線性表長度
void destorylist(linknode*&l)
return(n);
}
5.輸出線性表
設定指標指向首節點,依次輸出,後移
6.求線性表中某個資料元素值
找到第i個節點,若存在,則輸出true,否則返回false
bool getelem(linknode *l, int i, elemtype &e)
if(p==null)
return false;
else
}
7.按元素值查詢
int locateelem(linknode *l, elemtype &e)
if(p==null)
return(0); //不存在
else
return(i); //返回邏輯序列號
}
8.插入資料元素
實現過程先在單鏈表l中找到第i-1個結點,由p指向它,然後插入
bool listinsert(linknode *&l, int i, elemtype e)
if(p=null)
return false;
else
}
9.刪除資料元素
類似於上面插入,先找到第i-1個結點,然後執行刪除操作
bool listdelete(linknode *&l, int i, elemtype e)
if(p=null)
return false;
else
}
有乙個帶頭節點的單鏈表l(至少含有乙個資料結點),設計乙個演算法使其遞增有序
void sort(linknode *&l)
}
資料結構 鍊錶 單鏈表
陣列作為資料儲存結構有一定缺陷。無序陣列搜尋低效,有序陣列插入低效 無論哪種陣列,刪除低效 大小固定,無法所以改變。但是陣列的優勢是通過下標隨機訪問各個資料。鍊錶可以取代陣列作為儲存資料的基礎,比如棧,佇列。鍊錶分類 單鏈表 雙端鍊錶 有序鍊錶 雙向鍊錶 有迭代器的鍊錶 迭代器是用來隨機訪問鍊錶元素...
資料結構 鍊錶(單鏈表)
頭指標與頭結點不同,頭結點即第乙個結點,頭指標是指向第乙個結點的指標。鍊錶中可以沒有頭結點,但不能沒有頭指標。include using namespace std struct node node int d class list void insert int d void print node...
資料結構和演算法 鍊錶 單鏈表
線性表的鏈式儲存即形成鍊錶。在鏈式儲存結構中,每個儲存結點不僅包含所存元素本身的資訊即資料域,還包含元素之間的邏輯關係,即前驅結點包含有後繼結點的位址信 息,這就是指標域.從而提高資料的查詢速度。頭結點的引入是為了插入和刪除的方便。通過頭結點指標唯一標識乙個鍊錶。單鏈表 形式如下 linklist型...