複習一次鍊錶的基本操作
網上找到一位大佬的**
重新學習鍊錶
跟著他的**重新打了一遍
受益匪淺
最後在測試階段採用檔案重定向的方式
避免多次輸入資料
#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...