頭插法創建鏈表


     要使用鏈表,就要先創建一個鏈表,這里只說單鏈表。先介紹一下頭插法創建單鏈表鏈表。假如我們現在要在鏈表中插入一些數據:1、2、3、4、5,並從鍵盤輸入這些數據,

最后數據存入到鏈表中是反過來的,即{5,4,3,2,1},因為頭插法每次都是在頭部插入數據的,先插入1,此時表中數據為{1};接着在頭部插入2,此時表中數據數據為{2,1};

再在頭部插入3,此時表中數據數據為{3,2,1};以此類推,最后,表中數據的順序和你輸入的順序是相反的。

    為了弄明白頭插法的原理,我在網上找了一張圖來幫助理解頭插法,看圖

    

    所謂頭插法,就是每次新加入的節點,都插入在表頭結點的后面,插在表中第一個結點的前面,圖中obj結點就插在了a0結點的前面,以此類推。最后你會發現表中數據的順序與

你輸入的數據順序是相反的。

    而頭插法創建鏈表又分為兩種情況,一種是已知節點個數,還有一種是未知節點個數,下面用代碼來展示一下。先說一下未知結點個數的情況,即不確定輸入的結點個數,看代碼

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct LNode
 4 {
 5     int data;
 6     struct LNode *next;
 7 }LNode,*LinkList;
 8 
 9 LinkList create_LinkList()
10 {  
11        LinkList head;   //聲明頭指針
12        int  e;
13        char ch;  
14        LNode * p=NULL;
15        head=(LinkList)malloc(sizeof(LNode));  //頭插法創建鏈表需要創建表頭
16        head->next=NULL;        
do{
scanf("%d",&e);
20 p=(LinkList)malloc(sizeof(LNode)); 21 p->data=e; 22 p->next=head->next; //插入在頭部,讓當前節點的next指向下一個結點 23 head->next=p; //表頭指針指向當前結點 24 p=p->next; //p也指向下一個節點
}while((ch=getchar())!='\n');
27 return head; //返回頭指針 28 } 29 int main() 30 { 31 LinkList p; 32 p=create_LinkList(); 33 p=p->next; //鏈表有頭節點,讓p跳過頭結點,指向鏈表中的第一個結點 34 while(p!=NULL) 35 { 36 printf("%d ",p->data); 37 p=p->next ; 38 } 39 printf("\n"); 40 return 0; 41 }

結果如下:

    還有在已知結點個數的情況下,用代碼展示一下

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N  10     //結點個數
 4 typedef struct LNode
 5 {
 6     int data;
 7     struct LNode *next;
 8 }LNode,*LinkList;
 9 
10 LinkList create_LinkList()
11 {  
12        LinkList head;   //聲明頭指針
13        LNode * p=NULL;
14        head=(LinkList)malloc(sizeof(LNode));   //需要創建表頭結點
15        head->next=NULL;
16        for(int i=1;i<=N;i++)
17        {
18           p=(LinkList)malloc(sizeof(LNode));
19           scanf("%d",&p->data);
20           p->next=head->next;
21           head->next=p;
22           p=p->next;
23        }
24        return head;
25 } 
26 int main()
27 {
28     LinkList p;
29     p=create_LinkList();
30     p=p->next;
31     while(p!=NULL)
32     {
33        printf("%d ",p->data);
34        p=p->next ;
35     }
36     printf("\n");
37     return 0;
38 }

結果如下:

 通過觀察兩次的結果,可以看出用頭插法創建鏈表時都會產生這種情況:即插入的數據與插入的順序相反。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM