本人收藏的鍊錶的基本操作,已經經過上機測試,效果不錯!
#include
#include
using namespace std;
typedef int datatype; //鍊錶元素型別
typedef struct node //鍊錶結點
lnode,*plnode;
//建立帶有頭結點的鍊錶
//輸入ctrl+z結束
//有無頭結點將會影響到對鍊錶的所有操作,包括顯示鍊錶元素、插入、刪除、銷毀等
plnode creatlink()
return phead;
}//建立不帶頭結點的鍊錶
//輸入ctrl+z結束
plnode creatlinkwithnonnullhead()
else
ppre = pcur;
}return phead;
}//對頭結點為phead的鍊錶,在位置postoinsert處插入元素datatoinsert
//postoinsert定義為size_t型別,排除了位置為負數的異常輸入
//注意對輸入位置超過鍊錶長度的處理
plnode insertlink(plnode &phead,size_t postoinsert,const datatype datatoinsert)
pnew->next = pcur->next;
pcur->next = pnew;
return phead;
}//刪除結點指標指向的元素,未測試
plnode insertlinkatnode(plnode &phead,const plnode ppostoinsert,const datatype datatoinsert)
pnew->next = pcur->next;
pcur->next = pnew;
return phead;
}//對頭結點為phead的鍊錶,在位置postoinsert處插入元素datatoinsert
//postoinsert定義為size_t型別,排除了位置為負數的異常輸入
//注意對輸入位置超過鍊錶長度的處理
plnode deletelink(plnode &phead,size_t postodelete)
plnode pcur = phead;
plnode pnodetodelete = null;
size_t pospriortodelete = postodelete - 1;
while (pospriortodelete--)
pnodetodelete = pcur->next;
assert(pnodetodelete != null); 保證不超過鍊錶長度
pcur->next = pnodetodelete->next;
delete pnodetodelete;
return phead;
}//獲取鍊錶長度
size_t getlengthoflink(plnode phead)
return lengthoflink;
}//冒泡法最鍊錶元素排序
plnode bubblesortlink(plnode &phead)
pcur = pcur->next;}}
return phead;
}//鍊錶元素翻轉
plnode reverselink(plnode &phead)
plnode ppre = phead->next; //上面的if保證此處的訪問都是合法的
plnode pcur = ppre->next;
plnode pnxt = null;
ppre->next = null; //此時ppre為翻轉後鍊錶的最後乙個結點,將next置為null
while (pcur != null)
//phead = ppre;
phead->next = ppre;
return phead;
}//顯示有頭結點的鍊錶的元素
void displaylink(const plnode &phead)
coutpcur = pcur->next;
}coutwhile (pcur != null)
}//測試鍊錶操作
//除了作為比較的建立鍊錶操作,鍊錶的所有操作都基於帶有頭結點的鍊錶
//因為帶有頭結點的鍊錶在各種操作上都會比較方便
void testlink()
//清除流狀態
//test getlengthoflink...
//size_t lengthoflink = getlengthoflink(phead);
cout<<"test getlengthoflink..." cout<<"test bubblesortlink..." cout<<"the link after sort : " //test bubblesortlink... cout<<"test reverselink..." cout<<"the link after reverse : " destorylink(phead); /*cout<<"test creatlinkwithnonnullhead..." cout<<"display the link created by creatlinkwithnullhead : " destorylink(phead);*/ }//main int main() 刪除l的第i個資料元素,並用e返回其值,l的長度減1.迴圈結束後,p指向第i 1個結點,p next指向第i個結點。如果第i個結點不存在,則p next none,無法刪除第i個結點。status listdelete linklist l,int i,elemtype e if p next no... ifndef slist h define slist h include include include typedef int sltdatatype typedef struct slistnode slistnode typedef struct slist slist void slist... 鍊錶是一種線性結構,和順序表相比,鍊錶能充分利用磁碟上的空間,在對鍊錶進行插入刪除操作時,時間複雜度為o 1 相對於順序表,插入刪除時間複雜度為o n 但鍊錶需要額外的儲存指標的空間,且鍊錶不能隨機訪問。所以使用鍊錶還是使用順序表需要根據具體的使用場景。當多為查詢操作時使用順序表比較好,當刪除增加操...大話資料結構 鍊錶插入刪除操作
資料結構 順序表 鍊錶 基本操作
c資料結構 鍊錶基本操作