C语言如何创建单链表?
C语言创建单链表如下:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include "iostream.h"
typedef struct node
{
int data;
node * next;
}node , * List;
void create(int n)
{
int c;
List s,L;
L=(List)malloc(sizeof(node));
L-next=NULL;
printf("请输入第1个数据:");
scanf("%d",c);
L-data=c;
for(int i=2;i=n;i++)
{
s=(List)malloc(sizeof(node));
printf("请输入第%d个数据:",i);
scanf("%d",c);
s-data=c;
s-next=L;
L-next =s;
}
printf("链表创建成功!");
}
void main()
{
int n;
printf("请你输入链表的个数:");
scanf("%d",n);
create(n);
}
单链表创建方法:
单链表的建立有头插法、尾插法两种方法。
1. 头插法
单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法***得到的是尾结点。
由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请 存储空间可使用malloc()函数实现,需设立一申请单元 指针,但malloc()函数得到的指针并不是指向 结构体的指针,需使用 强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head 指针为NULL。
链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。
2. 尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法***得到的是 头结点。
单链表的创建-头插法和尾插法
单链表的创建一般主流分为两种创建方式:头插法和尾插法。
1)创建头节点,维护head指针(引用)来指向头节点;
2)newNode表示待插入节点,维护newnode指向新节点;
3)
case1:当链表为空时,即首次插入新节点,将head.next指向新插入节点,即 head.next = newNode;
case2:如果不是首次插入新节点,将新节点插入到head和head.next指向节点之间,即
newnode.next = head.next;
head.next = newNode;
1)创建头节点,维护head指针(引用)来指向头节点;
2)newNode表示待插入节点,维护tail指针,指示链表尾节点,当tail.next == null时,表示tail指向尾节点;
3)
case1:当链表为空时,即首次插入新节点,将head.next指向新插入节点,即 head.next = newNode;
case2:如果不是首次插入新节点,需要遍历整个链表定位到尾节点,并将新节点插入到尾节点之后,即
tail.next = newNode;
如何创建单链表?
建立单链表的常用方法有两种:头插法建表、尾插法建表
建立单链表的常用方法有两种。下面以顺序存储为例来叙述。
(1) 头插法建表
该方法从一个空表开始,读取数组a中的字符,生成新结点,将读取的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。算法如下:
void CreateListF(Snode *L, ElemType a[], int n)
{ Snode *s; int i;
L = (Snode *) malloc(sizeof(Snode));
L-next = NULL;
for (i=0; in;i++)
{ s = (Snode *)malloc(sizeof(Snode));
s-data = a[i];
s-next = L-next;
L-next = s;
}
}
(2) 尾插法建表
头插法建立链表虽然算法简单,但生成的链表中结点的次序和原数组元素的顺序相反,若希望两者次序一致,可采用尾插法。该方法是将新结点插到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点。算法如下:
void CreateListR(Snode *L, ElemType a[], int n)
{ Snode *s, *r; int i;
L = (Snode *) malloc(sizeof(Snode));
L-next = NULL;
r = L;
for (i=0; in;i++)
{ s = (Snode *)malloc(sizeof(Snode));
s-data = a[i];
r-next = s;
r = s;
}
r- next = NULL;
}
尾插法建立单链表的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于尾插法建立单链表的算法、尾插法建立单链表的信息别忘了在本站进行查找喔。