创建单链表(头插法、尾插法)


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