單鏈表的建立,插入,刪除,逆置

2021-08-20 10:10:56 字數 2618 閱讀 9338

單鏈表的建立,插入,刪除,逆置

一 單鏈表:一種線性的基本資料型別,可以理解為一條長度可變的線條,中間有許多節點,節點相互之間用指標連線,連線方向從頭節點至尾節點使用指標單向連線,訪問也只能從頭節點開始訪問,尾節點的指標指向null。

1 單鏈表的建立分為主函式,輸入函式,輸出函式三部分。

**:我這裡是個例子

a  頭插法(反向輸入,先輸入尾節點,再反向輸入,最後乙個節點為頭節點):輸入某個人的姓名年齡,輸出

#include

#include

typedef struct student//定義鍊錶

student;

student* input(student *head);//輸入鍊錶

student* scanf_(student *x);//單個節點的輸入

student* print(student *head);//輸出鍊錶

int main()

student* input(student *head)

head=q;//終止後頭節點為最後輸入的有效節點

return head;

}student* scanf_(student *x)

student* print(student *head)}/

b  尾插法:輸入學生的姓名,學號,年齡,成績

//建立鍊錶 (以下的新增,刪除,逆置以此程式為源程式)

#include

#include

#include

int n=0;

typedef struct student //定義鍊錶

student;

student* input(student *head);//輸入鍊錶

student* scanf_(student *p);//輸入某節點的內容

student* output(student *head);輸出鍊錶

int main()

student* input(student *head)

p2->next=null;

}  free(p1);//注意malloc的空間不free就會在程式執行期間占用記憶體空間

return head;

}///

student* scanf_(student *p)

/student* output(student *head)

}///

在完成建立後,可以對鍊錶進行一系列的操作,函式部分除了增加對應的函式,主函式改變,程式其餘函式部分不變,以下是部分操作

2 單鏈表的新增:

程式前面函式宣告處宣告函式student* add(student *newone,student *head);

student* input(student *head);

student* scanf_(student *p);

student* output(student *head);

student* add(student *newone,student *head,int n);

/int main()//主函式部分的變化

///鍊錶的輸入函式,節點的輸入函式,輸出函式

/student* add(student *newone,student *head,int x)//新增函式

newone->next=p->next;

p->next=newone;

n++;

return head;}//

3 鍊錶的刪除:刪除某個同學的資訊:比對名字,相同刪除

首先,宣告

student* input(student *head);

student* scanf_(student *p);

student* output(student *head);

student* del(student *newone,student *head);

/主函式

int main()

鍊錶的輸入函式,節點的輸入函式,輸出函式

student* del(student *newone,student *head)//刪除函式

t=strcmp(p->name,newone->name);

if(t==0)

while(p)

}  if(p==null)//沒找見

n--;//節點個數減一

return head;}/

4 單鏈表的逆置

逆置認為兩種,一種建立時的逆置,即頭插,另一種是就地逆置,也就是在這個鍊錶上借助臨時變數頭變尾,尾變頭,程式如下:

student* input(student *head);

student* scanf_(student *p);

student* output(student *head);

student* turn(student *head); //逆置函式

/主函式

int main()

鍊錶的輸入函式,節點的輸入函式,輸出函式

/student* turn(student *head)

head=plast;//當先行者為空時,代表逆置結束,臨時變數所記錄的節點為頭節點

return head;

}

單鏈表逆置

單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...

單鏈表逆置

name 單鏈表逆置 author 巧若拙 date 22 11 14 16 13 description 分別用遞迴和非遞迴兩種方式實現單鏈表 不含頭結點 的逆置 include include include typedef char elemtype typedef int status 函式...

單鏈表逆置

最近在leetcode oj上刷題,將一些演算法題的解法記錄下來,也期待一些新的更好的方法。題目是這樣滴 206.reverse linked list reverse a singly linked list.hint a linked list can be reversed either it...