//鍊錶基礎知識
typedef int datatype;
typedef struct listnode
listnode,*pnode;
// 鍊錶的初始化
void slistinit(pnode* phead);
//建立新結點
pnode buynewnode(datatype data);
// 尾插
void slistpushback(pnode* phead, datatype data);
// 尾刪
void slistpopback(pnode* phead);
// 頭插
void slistpushfront(pnode* phead, datatype data);
// 頭刪
void slistpopfront(pnode* phead);
// 在鍊錶中查詢值為data的元素,找到後返回值為data的結點
pnode slistfind(pnode phead, datatype data);
//求鍊錶結點個數
int slistsize(pnode phead);
// 在pos位置插入值為data的結點
void slistinsert(pnode* phead, int pos, datatype data);
// 刪除pos位置的結點
void slisterase(pnode* phead, int pos);
// 獲取鍊錶中值data的結點
int slistdatasize(pnode phead,datatype data);
// 判斷鍊錶是否為空
int slistempty(pnode phead);
// 銷毀鍊錶
void slistdestroy(pnode* phead);
/////測試函式
void testslistinit(); //測試初始化
void testpushtail(); //測試尾插
void testslistpopback(); //測試尾刪
void testpushfront(); //測試頭插
void testpopfront(); //測試頭刪
void testfind(); //測試找到值為data的結點,返回結點
void testinsert(); //測試在pos位置插入data
void testerase(); //測試刪除pos位置結點
void testdatasize(); //測試獲取值為data的結點
void testemptyanddestory(); 測試摧毀鍊錶和判斷鍊錶是否為空
// 鍊錶的初始化
void slistinit(pnode* phead)
//建立新結點
pnode buynewnode(datatype data)
pnew->_data = data;
pnew->_pnext = null;
return pnew;
}// 尾插
void slistpushback(pnode* phead, datatype data)
else
pcur->_pnext = tail; //將最後結點的下乙個結點改為新結點}}
// 尾刪
void slistpopback(pnode* phead)
else
}//free(pdel); //防止野指標的產生
pcur->_pnext = null; // 讓最後乙個結點為空
}// 頭插
void slistpushfront(pnode* phead, datatype data)
else
}// 頭刪
void slistpopfront(pnode* phead)
else //處理多個結點
}// 在鍊錶中查詢值為data的元素,找到後返回值為data的結點
pnode slistfind(pnode phead, datatype data)
else
pcur = pcur->_pnext;
}return null; //沒找到值為data的結點 返回空}}
//求鍊錶結點個數
int slistsize(pnode phead)
return flag;
}// 在pos位置插入值為data的結點
void slistinsert(pnode* phead, int pos, datatype data)
else
if (pcur == null) //處理pcur為空
else // 找到pos位置,插入到pcur後面,再交換二者資料}}
// 刪除pos位置的結點
void slisterase(pnode* phead, int pos)
while (--pos && pcur)
if (pcur == null)
else
else}}
// 獲取鍊錶中值data的結點
int slistdatasize(pnode phead, datatype data)
else}}
return count + 1; //返回data處在第幾個結點
}// 判斷鍊錶是否為空
int slistempty(pnode phead)
// 銷毀鍊錶
void slistdestroy(pnode* phead)
else
}//測試初始化
void testslistinit()
//測試尾插
void testpushtail()
//測試尾刪
void testslistpopback()
//測試頭插
void testpushfront()
//測試頭刪
void testpopfront()
//測試找到值為data的結點,返回結點
void testfind()
//測試在pos位置插入data
void testinsert()
//測試刪除pos位置結點
void testerase()
//測試獲取值為data的結點
void testdatasize()
//測試摧毀鍊錶和判斷鍊錶是否為空
void testemptyanddestory()
鍊錶基礎知識
1.為什麼用linkedlist array是乙個非常有用的資料結構,但是有兩個限制 1 當改變原有array的size的時候需要將原有array的所有元素copy到新array中去 2 由於array的資料儲存在記憶體中是連續空間,導致插入和刪除都會帶來其他資料的移動。鍊錶是由一系列的節點組成,這...
鍊錶基礎知識
鍊錶之前要有一定的c語言基礎,如指標,結構體,分配記憶體malloc等,切勿操之過急。第一次接觸可能有點難度,我是把書上的 反覆敲,反覆看注釋,搞了好幾天,才漸漸懂了。閒話少說,上 include include 要用到malloc struct llist int main printf 聯絡人 ...
鍊錶的基礎知識
最近在學資料結構,第二章學的線性表,對於從未接觸過來說的我 一臉懵逼,趕緊把 c pp 關於鍊錶的基礎知識拿過來惡補了一下。鍊錶的存在是為了克服 用陣列儲存浪費空間的問題,使用鍊錶之後,可以動態的加入,刪除,對於節省 空間有很大的幫助。下面我們來看一下鍊錶 鍊錶的一些基本知識點 雖然結構不能含有與本...