首页 > 其他 > 详细

头插法创建链表

时间:2020-04-28 18:09:45      阅读:56      评论:0      收藏:0      [点我收藏+]

     要使用链表,就要先创建一个链表,这里介绍头插法创建链表。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据,

最后数据存入到链表中是反过来的,即{5,4,3,2,1},因为头插法每次都是在头部插入数据的,先插入1,此时表中数据为{1};接着在头部插入2,

此时表中数据数据为{2,1};再在头部插入3,此时表中数据数据为{3,2,1};以此类推,最后,表中数据的顺序和你输入的顺序是相反的。而头插法创建链表又分为两种情况。一种是已知节点个数,

还有一种是未知节点个数。下面用代码来展示一下

    先说一下未知结点个数的情况,即不确定输入的结点个数,看代码

 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        int flag=-1;  //用-1作为输入结束标志
14        LNode * p=NULL;
15        head=(LinkList)malloc(sizeof(LNode));  //头插法创建链表需要创建表头
16        head->next=NULL;
17        scanf("%d",&e);
18        while(e!=flag)
19        {
20           p=(LinkList)malloc(sizeof(LNode));
21           p->data=e;
22           p->next=head->next;
23           head->next=p;
24           p=p->next;
25           scanf("%d",&e);
26        }
27        return head;
28 } 
29 int main()
30 {
31     LinkList p;
32     p=create_LinkList();
33     p=p->next;
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(int n)
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(N);
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 }

结果如下:

技术分享图片

 通过观察两次的结果,可以看出用头插法创建链表时都会产生这种情况:即插入的数据与插入的顺序相反。

头插法创建链表

原文:https://www.cnblogs.com/buanxu/p/12795278.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!