C语言来实现链表创建

前言

链表是数据结构中很重要的内容,要想学会数据结构,首先要了解链表

链表的基本知识

1,链表的构成

链表是由一个头指针和一个个节点构成的,如图:
在这里插入图片描述
而节点则是一个个结构体,包含数据域和指针域两部分,其中,指针域存储的是指向下一个节点的指针

2,对于链表的操作

1,创建链表
2,初始化链表
3,遍历链表
4,对于链表进行增删查等操作

C语言对于链表的代码的实现

1,创建结构体并命名

创建链表前需要先创建结构体作为节点和头指针:

typedef struct Node  //typedef方法函数可以对于struct Node进行重命名
{
    
    
    int i;
    struct Node *next;

}LNode,*LinkList;  //定义一个结构体指针方便后续的操作

2,链表初始化

链表初始化是为头指针分配空间,并要确保成功

bool InitList(LinkList &L)   
{
    
    
    L=(LNode *)malloc(sizeof(LNode));   //为头结点动态分配内存
    if(L==NULL)
    {
    
    
        return false;
    }
    L->next=NULL;  //初始化时头结点一定要指向空
    return true;
}

3,求链表的长度

通过对链表进行循环遍历,当链表为空时结束遍历,得出长度

int GetListLength(LinkList L)
{
    
    

    int listlength=0;
    LNode *p=L->next;

    while(p)
    {
    
    
        listlength++;
        p= p->next;
    }
    return listlength;
}

4,初始链表添加值

对于空链表添加值,有头插法和尾插法

头插法:

void HeadInsertList(LinkList &L,int n)  //n为插入数据的个数
{
    
    
    int data;
    //L->next=NULL; 初始化时已经指向空
    while(n--)
    {
    
    
        scanf("%d",&data);
        LNode *p=(LinkList)malloc(sizeof(LNode));
        p->i=data;
        p->next=L->next;
        L->next=p;
    }  
}

头插法插入数据逻辑简单,但是插入数据与在链表中的排序顺序相反

尾插法

void HeadInsertList(LinkList &L,int n)
{
    
    
    int data;
    LNode *End;
    End=L;
    while(n--)
    {
    
    
        scanf("%d",&data);
        LNode *p=(LinkList)malloc(sizeof(LNode));
        p->i=data;
        End->next=p;
        End=p;
    }
    End->next=NULL; //最后一个节点指针指向空
}

尾插法相对于头插法来说,数据的插入顺序与在链表中的数据顺序时一致的。

5,实现链表的遍历输出

void  TraverList(LinkList L)
{
    
    
    LNode *p=L->next;
    while(p)   //由于最后的节点指向空,可以通过这一特点结束遍历
    {
    
    
        printf("%d ",p->i);
        p=p->next;
    }
}

总结

上面就是链表的创建中的一些流程,可以 使用这些方法去做自己的链表哟

猜你喜欢

转载自blog.csdn.net/xinzhilinger/article/details/109011550
今日推荐