持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持
前言
本篇文章我们讲述一下链表的创建方法。链表创建的方法分为两种,主要分为头插法,和尾插法,也叫堆栈式和对列式。
建立单链表算法总结:
- 头插法:在链表的头部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相反。即先入后出也叫堆栈式。
- 尾插法:在链表的尾部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相同。即先入先出也叫对列式
堆栈方式建立单链表(头插法)
每次把新结点插入到链表的头部,使新插入的结点成为第一个实际的元素结点。
头插法建表从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直至读入结束标志为止。
代码实现:
node * creatlistf()
{
datatype data; node * head, *s;
s=(linklist)malloc(sizeof(node));
s->next=NULL;
head=s;
printf(“\n输入数据序列,以0结束:\n");
scanf("%d",&data);
while (data!=0) {
s=(node *) malloc(sizeof(node));
s->info=data;
s->next=head->next; // 新插入的结点成为第一个实际元素结点
head->next=s;
scanf("%d",&data); }
return head;
}
队列方式建立单链表(尾插法)
每次把新结点插入到链表的尾部,使新插入的结点成为尾结点。
将新结点插到当前单链表的表尾上。增加一个尾指针r,使之指向当前单链表的表尾。
代码实现:
node* creatlistr( )
{
datatype data; node *head,*s,*r;
s=(linklist)malloc(sizeof(node));
s->next=NULL;
head=s;
r=s;
scanf("%d",&data);
while (data!=0) {
s=(node *)malloc(sizeof(node));
s->info=data; /*产生新结点*/
r->next=s;
r=s;
scanf("%d",&data);
}
if (r!=NULL)
r->next=NULL; /*处理表尾结点指针域*/
return head;
}
好了,以上就是链表创建的方法,分别采用了头插法和尾插法表示,但是这个只是单链表的实现方法,之前有讲过链表和单链表,双链表,循环链表之分,这些会在后面的文章中一一阐述,喜欢文章的朋友可以点赞关注。
如果觉得文章对你有帮助,请点赞关注下。如有错误欢迎指正