为了克服顺序表的缺点(浪费存储空间,存储数量有限),可以采用链接方式存储线性表。我们将采用链式存储结构的线性表称为链表。
下面我们先看一下单链表
单链表包括两个区域:
1.数据域(用来存储结点的值)
2.指针域(用来指向下一个结点的存储地址)
因此,单链表节点定义如下:
typedef struct Node
{
ElemType data;(ElemType:结点值的类型,可 以为int,char,float,自定义类型等。)
struct Node *next;(指向下一个结点地址的指针)
}Node,*LinkList;(LinkList为结构指针类型)
接下来是初始化
void InitList(LinkNode *H)
{
(*H)=(LinkNode)malloc(sizeof(Node));
(*H)->next=NULL;
}
初始化准备一个空的头结点,此时没有后继节点所以头结点的next指向为空。
然后开始构建单链表:
两种方法
// 1.头插法
LinkNode CreateListHead(LinkNode H)
{
Node *s;
int a;
for(int i=1;1;i++)
{
printf("请输入第%d个数:",i);
scanf("%d",&a);
if(a==-100)
{
break;
}
else
{
s=(LinkNode)malloc(sizeof(Node));
s->elem=a;
s->next=H->next;
H->next=s;
}
}
return H;
}
这种创建链表的的方式通常使先插入的数据排在后面。
// 2.尾插法
LinkNode CreateListTail(LinkNode H)
{
Node *p,*q;
q=H;
int a;
for(int i=1;1;i++)
{
printf("请输入第%d个数:",i);
scanf("%d",&a);
if(a!=-100)
{
p=(LinkNode)malloc(sizeof(Node));
p->elem=a;
q->next=p;
q=p;
}
else
{
q->next=NULL;
break;
}
}
return H;
}
这种创建链表的方式就是以何种方式输入,就以何种方式排序存储。
创建单链表,通常返回链表的头结点,方便对链表有后继操作。
这样一个完整的链表就创建完成啦!
具体代码与运行结果:
如果有什么问题,欢迎多指正,希望能够共同进步!感谢您的阅读!