鍊錶基本操作

2021-09-11 03:34:38 字數 3847 閱讀 9405

複習一次鍊錶的基本操作

網上找到一位大佬的**

重新學習鍊錶

跟著他的**重新打了一遍

受益匪淺

最後在測試階段採用檔案重定向的方式

避免多次輸入資料

#include

using

namespace std;

struct student

;int n;

//節點總數

/**************************

功能:建立n個節點的鍊錶

返回:指向煉表表頭的指標

*************************

*/struct student *

create()

else

//節點開闢成功

while

(p1-

>num !=0)

//只要學號不為0,就繼續錄入下一節點

else

p2=p1;

//把p1的位址給p2保留,然後p1開闢新節點

p1=(struct student *

)malloc

(sizeof

(struct student));

cout <<

"please input "

<< n+

1<<

" node -- num,score: \n"

; cin >> p1-

>num >> p1-

>score ;

} p2-

>next =

null

;//單向鍊錶最後乙個節點指向null

free

(p1)

;//釋放p1

p1->next =

null

;//將清空的變數置null

return head;

//返回建立鍊錶的頭指標 }/*

*************************

功能:輸出節點

返回:void

*************************

*/void

print

(struct student *head)

while

(p!=

null);

}}/**************************

功能:刪除指定節點(此例中是刪除指定學號的節點)

返回:指向煉表表頭的指標

*************************

*/struct student *

del(

struct student *head,

int num)

//定位要刪除的節點

p1=head;

while

(p1-

>num != num && p1-

>next !=

null

)//p1的節點不是要刪除的,且不是最後乙個節點

if(p1-

>num == num)

//找到要刪除的節點

else

//若是其他節點

free

(p1)

;//釋放當前節點

p1=null

;//將清空的變數置null

cout <<

"\ndelete "

<< num <<

" success!\n"

; n--

;//節點總數減一

}else

//沒有找到

return head;}/*

*************************

功能:插入指定節點的後面(此例是指定學號的節點)

返回:指向煉表表頭的指標

*************************

*/struct student *

insert

(struct student *head,

int num,

struct student *node)

p1=head;

while

(p1-

>num != num && p1-

>next !=

null

)//p1不是我們要查詢的節點,並且它不是最後乙個節點

if(p1-

>num == num)

//若找到了節點

else

//若找不到節點

return head;}/*

*************************

功能:反序節點

(鍊錶的頭變成尾,尾變成頭)

返回:指向煉表表頭的指標

*************************

*/struct student *

reverse

(struct student *head)

head=p1;

return head;}/*

*************************

功能:直接插入排序(從小到大)

返回:指向煉表表頭的指標

*************************

*/struct student *

insertsort

(struct student *head)

else

t->next =q;

}return head;}/*

*************************

功能:氣泡排序(從小到大)

返回:指向煉表表頭的指標

*************************

*/struct student *

bubblesort

(struct student *head)}}

p1=head;

head=head-

>next ;

free

(p1)

; p1=

null

;return head;}/*

*************************

功能:插入有序鍊錶的某個節點後面(從小到大)

返回:指向煉表表頭的指標

*************************

*/struct student *

sortinsert

(struct student *head,

struct student *node)

p=head;

//有序鍊錶非空

while

(p->num >num && p !=

null

)//p的num小於node的num,且p不等於null

if(p==head)

//剛好插在第乙個節點之前

else

//插在其他節點之後

node-

>next =p;

//加入node節點

n++;//節點總數加一

return head;}/*

*************************

功能:銷毀鍊錶

返回:void

*************************

*/void

destorylist

(struct student *head)

while

(head)

return;}

intmain()

鍊錶基本操作

include include string h include typedef struct stust void xj st h 生成單鏈表 l l null void shc st h 輸出鍊錶 printf d n h d void chr st h 按大小插入元素 else h h l v...

鍊錶基本操作

動態記憶體的相關知識int p null 定義指標變數 p int malloc sizeof int 申請記憶體空間,並且進行強制型別轉換 p 3 使用指標變數 typedef struct list typedef struct listnode listpointer struct listn...

鍊錶基本操作

鍊錶就是c中利用結構體,將資料和下乙個結構體的位址封裝在乙個結構體中形成乙個節點,這些節點組合起來就是乙個基礎的鍊錶,根據需要可以擴充套件其中的內容來實現不同的需求。實現乙個鍊錶需要定義節點,建立,初始化,插入,刪除這些基本操作。include stdafx.h include stdlib.h i...