单链表操作——创建

最近在重温数据结构,先从单链表开始,首先系统讲一下单链表的初始化和创建。
一、初始化链表
定义一个结构体表示链表中的每一个结点:

typedef struct node
{
    ElemType data;
    struct node *next;
}*LinkList,LNode;

初始化操作:

int init_LinkList(LinkList *L)
{
    *L=(LinkList)malloc(sizeof(LNode));
    if(*L==NULL)
        return 0;
    (*L)->next=NULL;
    return 1;
}

初始化生成一个空结点:
一个空结点

二、创建链表
1、无头结点
(1)头插法(逆序)

LinkList createh_LinkList()
{
    LinkList L=NULL;
    LinkList p;
    int flag=1;
    while(flag)
    {
        p=(LinkList)malloc(sizeof(LNode));
        if(p==NULL)
            return NULL;
        printf("input:\n");
        scanf("%d",&p->data);
        printf("continue or not,1 or 0:\n");
        scanf("%d",&flag);
        p->next=L;
        L=p;
    }
    return L;
}

这里写图片描述

(2)尾插法(正序)

LinkList creater_LinkList()
{
    LinkList L=NULL;
    LinkList p,r;
    int flag=1;
    while(flag)
    {
        p=(LinkList)malloc(sizeof(LNode));
        if(p==NULL)
            return NULL;
        printf("input:\n");
        scanf("%d",&p->data);
        printf("continue or not,1 or 0:\n");
        scanf("%d",&flag);
        p->next=NULL;
        if(L==NULL)        //判断是否为第一个结点
            L=p,r=p;
        else
            r->next=p,r=p;
    }
    return L;
}

这里写图片描述

2、有头结点
(1)头插法(逆序)

LinkList createh_LinkList()
{
    LinkList L=NULL;
    LinkList p;
    int flag=1;
    if(init_LinkList(&L)==0)
        return NULL;
    while(flag)
    {
        p=(LinkList)malloc(sizeof(LNode));
        if(p==NULL)
            return NULL;
        printf("input:\n");
        scanf("%d",&p->data);
        printf("continue or not,1 or 0:\n");
        scanf("%d",&flag);
        p->next=L->next;
        L->next=p;
    }
    return L;
}

这里写图片描述

(2)尾插法(正序)

LinkList creater_LinkList()
{
    LinkList L=NULL;
    LinkList p,r;
    int flag=1;
    if(init_LinkList(&L)==0)
        return NULL;
    r=L;
    while(flag)
    {
        p=(LinkList)malloc(sizeof(LNode));
        if(p==NULL)
            return NULL;
        printf("input:\n");
        scanf("%d",&p->data);
        printf("continue or not,1 or 0:\n");
        scanf("%d",&flag);
        p->next=NULL;
        r->next=p;
        r=p;
    }
    return L;
}

这里写图片描述

有头结点的单链表操作简单,但是需要有一个空的结点,没有头结点的单链表节省空间,但是操作起来比较麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值