数据结构和算法–单链表的整表创建
头插法
从头开始插入,按顺序插入,优点是算法简单,缺点是插入的数据和内存的数据储存顺序不一样。
头插法,就是后一个节点头指向前一个节点尾,因此新建的节点指向下一个节点的头。
C代码
void CreatListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0));//初始化随机种子
*L=(LinkList)malloc(sizeof(Node));//创建头指针
(*L)->next=NULL;//头指针指向NULL
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));//创建节点
p->data=rand()%100+1;
p->next=(*L)->next;//头插法的下一个指向空
(*L)->next=p;//头指针指向创建的节点
}
}
尾插法
这里尾插法保存数据的关键是用r作为索引,r是具有上一个节点的信息,因此能够被下一个节点找到。
C代码
void CreatListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0));//初始化随机种子
*L=(LinkList)malloc(sizeof(Node));//创建头指针
r=(*L);//r
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));//创建节点
p->data=rand()%100+1;
r->next=p;//p是临时节点
r=p;//为下一次尾插做准备,保存这个节点的信息,方便访问
}
r->next=NULL;
}
链表的删除
从第一个开始,根据链表的结构,使用删除一个结点,使用一个节点保存当前删除节点的信息,以边指向下一个节点。
int delateListTail(LinkList *L)
{
LinkList p,q;
p=(*L)->next;//从第一个节点开始
while(!p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
return 1;
}