创建链表的三种算法(C语言实现)

您所在的位置:网站首页 创建链表输出链表 创建链表的三种算法(C语言实现)

创建链表的三种算法(C语言实现)

2024-07-11 01:07| 来源: 网络整理| 查看: 265

链表分为静态链表和动态链表,本文主要讨论动态链表的创建。

静态链表是用两个数组模拟一个链表,其中一个数组中存实际数据,可以称之为数据数组。另一个数组中存数据数组中各元素的下标,我们称之为地址数组(注意地址数组中存的并不是地址值,而是整形的数)。静态数组的好处是避免了指针的操作,不足之处是占用了较多的存储空间。

静态链表不是本文讨论的重点,下面主要讨论创建动态链表的三个常用算法。

这里链表每个节点中的数据域以一个int型的数据为例,并且数据是通过数组传入,而不是用户直接输入的。

此外,本文只是说明创建链表的方法,创建成功之后无法再次在链表中加入节点。

创建链表的方法大致有三种:

1.正向创建链表:最容易理解,即为每次在链表末尾插入一个节点。

2.逆向创建链表:即为每次在原链表的头结点之前插入一个节点。

3.递归创建链表:递归创建链表的特点在于,递归调用时申请空间并对数据域赋值,递归返回时挂链。所以创建出来的是一个逆向的链表。

#include #include typedef struct Node{ int data; struct Node *next; }ElemSN; ElemSN* CreatLink1(int data[],int n);//正向(尾插法)创建无表头链表 ElemSN* CreatLink2(int data[],int n);//逆向(头插法)创建无表头链表 ElemSN* CreatLink3(int data[],int n);//递归法创建链表 void PrintLink(ElemSN *h);//正向输出链表的数据 void DeleteLink(ElemSN *h);//删除链表 int main(void) { ElemSN *head1=NULL,*head2=NULL,*head3=NULL; int data[8]={3,2,5,8,4,7,6,9}; head1=CreatLink1(data,8);//正向(尾插法)创建无表头链表 PrintLink(head1); head2=CreatLink2(data,8);//逆向(头插法)创建无表头链表 PrintLink(head2); head3=CreatLink3(data,8);//递归法创建链表 PrintLink(head3); DeleteLink(head1);//删除链表 DeleteLink(head2); DeleteLink(head3); return 0; } ElemSN* CreatLink1(int data[],int n)//正向(尾插法)创建无表头链表 { ElemSN *h=NULL,*p=NULL,*t=NULL; int i; for(i=0;idata=data[i]; p->next=NULL; if(h==NULL){ t=h=p; } t=t->next=p; } return h; } ElemSN* CreatLink2(int data[],int n)//逆向(头插法)创建无表头链表 { ElemSN *h=NULL,*p=NULL; int i; for(i=n-1;i>=0;i--){ h=(ElemSN *)malloc(sizeof(ElemSN)); h->data=data[i]; if(!h){//if(h==NULL) p=h; h->next=NULL; } h->next=p; p=h; } return h; } ElemSN* CreatLink3(int data[],int n)//递归法创建链表 { ElemSN *p=NULL; if(n==0) return NULL; p=(ElemSN *)malloc(sizeof(ElemSN)); p->data=data[n-1]; p->next=CreatLink3(data,n-1); return p; } void PrintLink(ElemSN *h)//正向输出链表的数据 { ElemSN *p=NULL; for(p=h;p!=NULL;p=p->next){ printf("%4d",p->data); } printf("\n链表输出结束!\n"); } void DeleteLink(ElemSN *h)//删除链表 { ElemSN *delp=NULL,*q=NULL; delp=h->next; h->next=NULL; while(delp!=NULL){ q=delp->next; free(delp); delp=q; } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3