鍊錶的基礎知識

2021-08-19 03:16:26 字數 3504 閱讀 1894

//鍊錶基礎知識

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 關於鍊錶的基礎知識拿過來惡補了一下。鍊錶的存在是為了克服 用陣列儲存浪費空間的問題,使用鍊錶之後,可以動態的加入,刪除,對於節省 空間有很大的幫助。下面我們來看一下鍊錶 鍊錶的一些基本知識點 雖然結構不能含有與本...