c語(yǔ)言實(shí)現(xiàn)單鏈表算法示例分享
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
typedef struct Node{
DataType data;
struct Node * Next;
}ListNode,* LinkList;
void Judement(LinkList head){ //判斷分配內(nèi)存
if (!head){
printf("Overflow.");
exit(-1);
}
}
LinkList CreatListF(void){ //頭插法創(chuàng)建Single Linked List
DataType ch;
LinkList head = (ListNode*)malloc(sizeof(ListNode));
Judement(head);
ListNode* s;
ch = getchar();
while (ch != '\n'){
s = (ListNode*)malloc(sizeof(ListNode));
Judement(s);
s->data = ch;
s->Next = head->Next;
head->Next = s;
ch = getchar();
}
return head;
}
LinkList CreatListS(void){ //尾插法創(chuàng)建Single Linked List
char ch;
ListNode* s;
LinkList head = (ListNode*)malloc(sizeof(ListNode));
Judement(head);
ch = getchar();
while (ch != '\n'){
s = (ListNode*)malloc(sizeof(ListNode));
Judement(s);
s->data = ch;
head->Next = s;
head = s;
ch = getchar();
}
head->Next = NULL;
return head;
}
int GetLength(LinkList head){ //獲取長(zhǎng)度
int length = 0;
LinkList p = head->Next;
while (p){
length += 1;
p = p->Next;
}
return length;
}
ListNode* GetNodeById(LinkList head, int i){ //依序號(hào)查找元素
if (i<1 || i>GetLength(head)){
exit(1);
}
int j=1; //防止極端情況掃描逾界
LinkList p = head->Next;
while (p != NULL && j < i){
j += 1;
p = p->Next;
}
return p;
}
ListNode* GetNodeByValue(LinkList head, DataType e){ //依值查找元素
LinkList p = head->Next;
while (p != NULL&&p->data != e){
p = p->Next;
}
return p;
}
int InsertList(LinkList head, DataType e, int i){ //插入e值在第i節(jié)點(diǎn)
if (i<1 || i>GetLength(head) + 1){
exit(1);
}
LinkList s = (ListNode*)malloc(sizeof(ListNode));
s->data = e;
LinkList q, p = head;
int j = 1;
while (j <= i){
q = p;
p = p->Next;
j += 1;
}
s->Next = q->Next;
q->Next = s;
return 0;
}
int DeleteListNodeById(LinkList head, int i){ //依序號(hào)刪除節(jié)點(diǎn)
int j = 1;
ListNode* p,* q;
if (i<1 || i>GetLength(head)){
exit(1);
}
p = head;
while (j < i){
p = p->Next;
j += 1;
}
q = p->Next;
p->Next = q->Next;
free(q);
return 0;
}
int DeleteListRepeatNode(ListNode* head){ //清除冗余數(shù)據(jù)
ListNode* p, *q, *s;
if (p == NULL){
exit(1);
}
p = head->Next; //首節(jié)點(diǎn)無(wú)數(shù)據(jù)
while (p->Next != NULL){
q = p;
while (q->Next != NULL){
if (q->Next->data == p->data){
s = q->Next;
q->Next = q->Next->Next;
free(s);
}
q = q->Next;
}
p = p->Next;
}
return 0;
}
- C語(yǔ)言之單鏈表的插入、刪除與查找
- C語(yǔ)言實(shí)現(xiàn)單鏈表逆序與逆序輸出實(shí)例
- C語(yǔ)言單鏈表常見(jiàn)操作匯總
- C語(yǔ)言單鏈表實(shí)現(xiàn)多項(xiàng)式相加
- C語(yǔ)言單鏈表的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu) C語(yǔ)言實(shí)現(xiàn)循環(huán)單鏈表的實(shí)例
- C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
- C語(yǔ)言實(shí)現(xiàn)單鏈表實(shí)現(xiàn)方法
- C語(yǔ)言單鏈表版學(xué)生信息管理系統(tǒng)
- C語(yǔ)言單鏈表實(shí)現(xiàn)方法詳解
相關(guān)文章
C語(yǔ)言深入細(xì)致講解動(dòng)態(tài)內(nèi)存管理
動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理2022-05-05聊聊C++中右值引用和移動(dòng)構(gòu)造函數(shù)的使用
這篇文章主要是來(lái)和大家一起聊聊C++中右值引用和移動(dòng)構(gòu)造函數(shù)的使用,文中通過(guò)示例進(jìn)行了詳細(xì)講解,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07深入c++中臨時(shí)對(duì)象的析構(gòu)時(shí)機(jī)的詳解
本篇文章對(duì)c++中臨時(shí)對(duì)象的析構(gòu)時(shí)機(jī)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05如何在程序中判斷VS的版本(實(shí)現(xiàn)方法詳解)
下面小編就為大家?guī)?lái)一篇如何在程序中判斷VS的版本(實(shí)現(xiàn)方法詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05C語(yǔ)言編程C++柔性數(shù)組結(jié)構(gòu)示例講解
這篇文章主要介紹了C語(yǔ)言編程系列中的柔性數(shù)組,文中含有詳細(xì)的示例代碼講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09你只用do-while來(lái)實(shí)現(xiàn)循環(huán)?太浪費(fèi)了
這篇文章主要介紹了你只用do-while來(lái)實(shí)現(xiàn)循環(huán)?太浪費(fèi)了,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12一文帶你學(xué)會(huì)C語(yǔ)言中的qsort函數(shù)
qsort函數(shù)是C語(yǔ)言的庫(kù)函數(shù),能實(shí)現(xiàn)對(duì)各種元素類(lèi)型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實(shí)現(xiàn)原理,只對(duì)使用方法進(jìn)行說(shuō)明,希望對(duì)大家有所幫助2022-12-12C++11 shared_ptr 與 make_shared源碼剖析詳解
這篇文章主要介紹了C++11 shared_ptr 與 make_shared的源碼剖析,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09