創建單鏈表(頭插法、尾插法)


1、頭插法創建單鏈表(生成的鏈表中結點的順序與輸入的順序相反)

//頭插法創建單鏈表
Status CreateList_L(LinkList &L,int n){//前提L已經初始化完成 
    LinkList p;
    int a;
    for(int i=0;i<n;i++){
        p = (LinkList)malloc(sizeof(Node));
        scanf("%d",&a);
        p->data = a;
        p->next = L->next;//p指向下一個 
        L->next = p;//再將p給單鏈表L的表頭 
    }
    return OK; 
} 

2、尾插法創建單鏈表(與輸入的順序相同)

//尾插法創建單鏈表
Status CreateList_Tail(LinkList &L, int n){
    LinkList p,r;
    r = L;
    int a;
    for(int i=0;i<n;i++){
        p = (LinkList)mallco(sizeof(Node));
        scanf("%d",&a);
        p->data = a;
        r->next = p;
        r = p; 
    }
   r->next = NULL;
return OK; }

 3、綜合實現

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #define OVERFLOW -2
 6 typedef struct Node{
 7     int data;
 8     struct Node *next;
 9 }Node,*LinkList;
10 
11 int ListInit_L(LinkList &L){
12     L = (LinkList)malloc(sizeof(Node));
13     if(!L)
14         exit(OVERFLOW);
15     L->next = NULL;
16     return 1;
17 }
18 
19 
20 void CreatList_head(LinkList &L, int n){
21     LinkList p;
22     int a;
23     for(int i = 0; i < n; i++){
24         p = (LinkList)malloc(sizeof(Node));
25         scanf("%d",&a);
26         p->data = a;
27         p->next = L->next;
28         L->next = p;
29     }
30 }
31 
32 void CreatList_tail(LinkList &L, int n){
33     LinkList p,r;
34     r = L;
35     int a;
36     for(int i = 0; i < n; i++){
37         p = (LinkList)malloc(sizeof(Node));
38         scanf("%d",&a);
39         p->data = a;
40         r->next = p;
41         r = p;
42     }
43     r->next = NULL;
44 }
45 
46 void printList(LinkList &L){//輸出單鏈表 
47     LinkList q;
48     q = L->next;
49     while(q){ 
50         printf("%d ",q->data);
51         q = q->next;
52     }  
53 }
54 
55 int main(){
56     LinkList L;
57     ListInit_L(L);
58     printf("請選擇:\n\n1、頭插法創建單鏈表\n2、尾插法創建單鏈表\n\n請你選擇創建方式:");
59     int x;
60     scanf("%d",&x);
61     if(x==1){
62         printf("頭插法創建單鏈表:\n\n請你輸入創建數據元素的個數:");
63         int n;
64         scanf("%d",&n); 
65         CreatList_head(L,n);//頭插法創建單鏈表
66         printList(L);//輸出 
67     } 
68     if(x==2){
69         printf("尾插法創建單鏈表:\n\n請你輸入創建數據元素的個數:");
70         int n;
71         scanf("%d",&n); 
72         CreatList_tail(L,n);//頭插法創建單鏈表
73         printList(L);//輸出 
74     }
75     return 0; 
76 }

 


免責聲明!

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



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