由于顺序表存在扩容时容易造成空间浪费以及在头部、中部插入数据时挪动数据很费时的缺陷,在解决上述两个问题时,使用链表是更优的选择。
创建单链表,每个节点由数据data和指向下一个节点的指针next组成。(此部分在头文件sList.h中)
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int SLTDataType;
typedef struct SListNode
{
SLTDataType data;
struct SListNode* next;
}SLTNode;
通过下面的函数在一个节点中输入数据x:
SLTNode* BuySLTNode(SLTDataType x)
{
SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
if (newnode == NULL)
{
perror("malloc fail");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
return newnode;
}
创建一个有n个节点的链表:
SLTNode* CreateSLTNode(int n)
{
SLTNode* phead = NULL,*ptail = NULL;
for (int i = 0; i < n; i++)
{
SLTNode* newnode = BuySLTNode(i);
if (phead == NULL)
{
phead =ptail= newnode;
}
else
{
ptail->next = newnode;
ptail = newnode;
}
}
return phead;
}
函数BuySLTNode括号里的i是在链表中输入的数据,这里默认输入0到n,也可以是其它数字。
打印:
void SLTPrint(SLTNode* phead)
{
SLTNode* cur = phead;
while (cur != NULL)
{
printf("%d->", cur->data);
cur = cur->next;
}
}