C语言来实现链表创建

C语言来实现链表创建前言链表是数据结构中很重要的内容,要想学会数据结构,首先要了解链表链表的基本知识1,链表的构成链表是由一个头指针和一个个节点构成的,如图:而节点则是一个个结构体,包含数据域和指针域两部分,其中,指针域存储的是指向下一个节点的指针2,对于链表的操作1,创建链表2,初始化链表3,遍历链表4,对于链表进行增删查等操作C语言对于链表的代码的实现1,创建结构体并命名创建链表前需要先创建结构体作为节点和头指针:typedefstructNode//typedef方法函数可以对于st

链表原理理解

链表作为一种线性数据,通过前后节点的指针指向,将所有数据串联起来。为了实现链表数据域的整体耦合,需要额外的指针域来标定前后数据的连接。通过下面的链表结构图,可以非常容易的理解链表的组成结构

在这里插入图片描述
头节点作为链表,不设定数据域,而其他节点则由数据域域指针域组合而成

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

1,创建结构体并命名

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

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

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

2,链表初始化

通过创建空数据域作为头节点来创建一个指针

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

3,求链表的长度

程序操作步骤为:

  • 定义一个空指针指向链表的头节点,并根据链表节点的指向移动该指针,直到该指针指向空节点时停止

  • 定义int字段标记链表长度,在申请的指针移动时累加记录并最后返回结果

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 data)  
{ 
   
     scanf("%d",&data);
     LNode *p=(LinkList)malloc(sizeof(LNode));
     p->i=data;
     p->next=L->next;
     L->next=p; 
}

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

尾插法

void EndInsertList(LinkList L,int data)
{ 
   
    LNode *End;
    End=L;    
    while(End->next)
    { 
   
   		End=End->next;   	
    }    
    LNode *p=(LinkList)malloc(sizeof(LNode));
    p->i=data;
    End->next=p;
	p->best=NULL;
}

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

5,实现链表的遍历输出

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

总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37043.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注