大話資料結構(一)鍊錶的基本操作

2021-06-29 10:56:13 字數 2999 閱讀 9326

本人收藏的鍊錶的基本操作,已經經過上機測試,效果不錯!

#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...

c資料結構 鍊錶基本操作

鍊錶是一種線性結構,和順序表相比,鍊錶能充分利用磁碟上的空間,在對鍊錶進行插入刪除操作時,時間複雜度為o 1 相對於順序表,插入刪除時間複雜度為o n 但鍊錶需要額外的儲存指標的空間,且鍊錶不能隨機訪問。所以使用鍊錶還是使用順序表需要根據具體的使用場景。當多為查詢操作時使用順序表比較好,當刪除增加操...