线性表----头插法创建链表

通过while 调用创建

#include <stdio.h>
#include <stdlib.h>

struct Test
{
        int data;
        struct Test *next;
};

struct Test *createLinks(struct Test *head)
{
        struct Test *new;
        new = (struct Test*)malloc( sizeof(struct Test) );

        printf("input data to create links:\n");
        scanf("%d",&(new->data));

        if(head == NULL){

                head = new;
                return head;
        }else{

                new->next = head;
                head = new;
                return head;
        }
}

void printLinks(struct Test *head)
{
        struct Test *p = head;

        while(p != NULL){


                printf("data = %d\n",p->data);
                p = p->next;
        }

}

int main()
{
        int i = 3;
        struct Test *head;

        while(i--){     //调用3次 创建3次
                head = createLinks(head);
        }

        printLinks(head);

        return 0;
                                                                                                                     



判断输入为0 停止创建

#include <stdio.h>
#include <stdlib.h>

struct Test
{
        int data;
        struct Test *next;
};

struct Test *createLinkFor(struct Test *head)
{
        struct Test *new = NULL;

        while(1){

                new = (struct Test*)malloc( sizeof(struct Test) );

                printf("input data to create links:\n");
                scanf("%d",&new->data);

                if(new->data == 0){ //输入为0时 停止创建链表

                        free(new);//释放空间
                        printf("exit\n");
                        return head;
                }

                if(head == NULL){

                        head = new;
                }else{

                        new->next = head;
                        head = new;
                }                                                                                                       
        }
}

void printLink(struct Test *head)
{
        struct Test *p;
        p = head;

        while(p != NULL){

                printf("data = %d\n",p->data);
                p = p->next;
        }

}

int main()
{
        struct Test *head = NULL;

        head = createLinkFor(head);

        printLink(head);

        return 0;
}



头插法的改进:

#include <stdio.h>
#include <stdlib.h>

struct Test
{
        int data;
        struct Test *next;
};

struct Test *insertLink(struct Test *head,struct Test *new)
{

                if(head == NULL){

                        head = new;
                }else{

                        new->next = head;
                        head = new;
                }
}

struct Test *createLink(struct Test *head)
{
        struct Test *new;

        while(1){

                new = (struct Test*)malloc( sizeof(struct Test) );

                printf("input data to create links:\n");
                scanf("%d",&(new->data));

                if(new->data == 0){

                        printf("quit\n");
                        return head;
                }

                 head = insertLink(head,new);
             }
}

void printLinks(struct Test *head)
{
        struct Test *p = head;

        while(p != NULL){

                printf("data = %d\n",p->data);
                p = p->next;
        }

}

int main()
{
        struct Test *head;

        head = createLink(head);

        printLinks(head);

        return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。关于您的问题: (1) 头插法建立单链表的步骤如下: 1. 定义一个单链表的指针变量p和一个待插入元素的值v; 2. 将p指向链表的头结点; 3. 创建一个新节点s,将s的元素值设置为v,将s的指针域指向链表的头结点; 4. 将链表的头结点指向s。 按照这个步骤,我们可以将线性表L=(1, 2, 3, 4, 5)用头插法建立相应的单链表。具体的过程如下: 1. 创建头结点h,将h的next指针设置为NULL; 2. 从线性表L的尾部开始,依次将元素插入单链表中,插入的位置是链表的头结点。 (1) 将元素5插入单链表中。 - 创建一个新节点s1,将s1的元素值设置为5,将s1的指针域指向链表的头结点; - 将链表的头结点指向s1。 (2) 将元素4插入单链表中。 - 创建一个新节点s2,将s2的元素值设置为4,将s2的指针域指向链表的头结点; - 将链表的头结点指向s2。 (3) 将元素3插入单链表中。 - 创建一个新节点s3,将s3的元素值设置为3,将s3的指针域指向链表的头结点; - 将链表的头结点指向s3。 (4) 将元素2插入单链表中。 - 创建一个新节点s4,将s4的元素值设置为2,将s4的指针域指向链表的头结点; - 将链表的头结点指向s4。 (5) 将元素1插入单链表中。 - 创建一个新节点s5,将s5的元素值设置为1,将s5的指针域指向链表的头结点; - 将链表的头结点指向s5。 这样,我们就用头插法建立了相应的单链表。 (2) 在线性表L的第2个位置插入值为3的元素的步骤如下: 1. 定义一个单链表的指针变量p和一个待插入元素的值v; 2. 将p指向链表的头结点; 3. 创建一个新节点s,将s的元素值设置为v,将s的指针域指向p所对应的节点的后继节点; 4. 将p所对应的节点的指针域指向s。 按照这个步骤,在线性表L的第2个位置插入值为3的元素,具体的过程如下: 1. 将指针p指向链表L的第1个节点; 2. 将指针p指向链表L的第2个节点; 3. 创建一个新节点s,将s的元素值设置为3,将s的指针域指向p所对应的节点的后继节点; 4. 将p所对应的节点的指针域指向s。 这样,我们就向线性表L的第2个位置插入了值为3的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值