生活随笔
收集整理的這篇文章主要介紹了
单链表介绍及其实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈表
文章目錄
- 鏈表
- 鏈表的專業(yè)術(shù)語:
- 實(shí)現(xiàn)
鏈表的專業(yè)術(shù)語:
首節(jié)點(diǎn):存放第一個(gè)有效數(shù)據(jù)的結(jié)點(diǎn);尾結(jié)點(diǎn):存放最后一個(gè)有效數(shù)據(jù)的結(jié)點(diǎn);尾指針指向;頭結(jié)點(diǎn):頭結(jié)點(diǎn)的數(shù)據(jù)類型和首結(jié)點(diǎn)的類型一模一樣;
頭結(jié)點(diǎn)是首節(jié)點(diǎn)前面的那個(gè)結(jié)點(diǎn);
頭結(jié)點(diǎn)并不存放有效數(shù)據(jù);
設(shè)置頭結(jié)點(diǎn)的目的是為了方便存儲(chǔ)數(shù)據(jù);
頭指針:存放頭結(jié)點(diǎn)地址的指針變量,指向頭結(jié)點(diǎn);
單鏈表的插入實(shí)現(xiàn)邏輯:
鏈表插入的核心語句:
Step
1:s
->next
=p
->next
;
Step
2:p
->next
=s ;
單鏈表的刪除實(shí)現(xiàn)邏輯:
刪除動(dòng)作的核心語句(要借助輔助指針變量q):
q
= p
->next
;
p
->next
=q
->next
;
free(q
) ;
實(shí)現(xiàn)
以下代碼實(shí)現(xiàn)了鏈表的插入,刪除,反轉(zhuǎn),遍歷
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE (10)typedef int ElementType
;
typedef struct Node
{ElementType data
;struct Node
*Next
;
} *List
;List
CreateList(void)
{List L
= (List
)malloc(sizeof(struct Node
));if (L
== NULL) {printf("Out of space!");return NULL;}L
->data
= 0;L
->Next
= NULL;return L
;
}List
InitList(List L
)
{List rear
= L
;srand((unsigned)time(NULL));for (int i
= 0; i
< MAXSIZE
; i
++) {List p
= (List
)malloc(sizeof(struct Node
));p
->data
= rand() % 100; rear
->Next
= p
;rear
= p
; }rear
->Next
= NULL;
}void PrintList(List L
)
{List head
= L
->Next
;while (head
) {printf("%d ", head
->data
);head
= head
->Next
;}printf("\n");
}void ReverseList(List L
)
{List head
= L
->Next
;List tmp
= L
->Next
->Next
;head
->Next
= NULL;List p
= NULL;while (tmp
) {p
= tmp
;tmp
= tmp
->Next
;p
->Next
= head
;head
= p
;}L
->Next
= head
;
}void DeleteEven(List L
)
{List p
= L
;List q
;while (p
->Next
) {q
= p
->Next
;if (q
->data
% 2 == 0) {p
->Next
= q
->Next
;free(q
); } else {p
= p
->Next
;}}
}void Insert(List L
)
{int input
;List p
= L
;List q
= L
->Next
;List tmp
= (List
)malloc(sizeof(struct Node
));printf("please input specify number to insert: ");scanf("%d", &input
);tmp
->data
= input
;while (q
&& (q
->data
< input
)) {p
= p
->Next
;q
= p
->Next
; }tmp
->Next
= q
;p
->Next
= tmp
;
}int main(void)
{List L
= CreateList();InitList(L
);PrintList(L
);ReverseList(L
);PrintList(L
);DeleteEven(L
);PrintList(L
);Insert(L
);PrintList(L
);return 0;
}
運(yùn)行結(jié)果如圖
總結(jié)
以上是生活随笔為你收集整理的单链表介绍及其实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。