单链表的整表创建和删除
一、单链表的整表创建
创建单链表的过程是一个动态生成链表的过程,从“空表”的初始状态起,依次建立各元素结点并逐个插入链表。
单链表整表创建的算法思路如下:
1)声明一结点P 。2)初始化一空链表L 。3)建立一个带头结点的单链表,即让L的头结点的指针指向NULL。4)循环实现后继结点的赋值和操作。
单链表创建的方法有两种:头插法和尾插法。
1、头插法—把新加进的元素放在表头后的第一个位置。具体操作就是首先是新结点的next指向头结点之后,表头的next指向新结点。
头插法的程序如下:
typedef float ElemType;
typedef struct Node
{
ElemType data;//数据域
struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
void CreateLinkList(LinkList L,int n)
{
LinkList p;
int i;
srand(time(0));
L = (LinkList)malloc(sizeof(Node));//建立表头
L->Next = NULL;
for(i = 0;i < n;i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand()%100 + 1;
p->Next = L->Next;
L->Next = p;
}
}
头插法建立的链表,生成的链表中结点的次序和输入的顺序相反。
2、尾插法—新结点都插入到最后。
尾插法程序如下:
typedef float ElemType;
typedef struct Node
{
ElemType data;//数据域
struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
void CreateLinkList(LinkList L,int n)
{
LinkList p,r;
int i;
srand(time(0));
L = (LinkList)malloc(sizeof(Node));//建立表头
r = L;
for(i = 0;i < n;i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand()%100 + 1;
r->Next = p;
r = p;
}
r->Next = NULL;
}
二、单链表的整表的删除
单链表整表删除的算法思路如下:
1)声明结点p和q。2)将第一个结点赋值给p,下一结点赋值给q。3)循环执行释放p和将q赋值给p的操作。
单链表整表删除的代码如下:
#define bingo 1
#define error 0
typedef float ElemType;
typedef struct Node
{
ElemType data;//数据域
struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
int clearList(LinkList L)
{
LinkList p,q;
p = L->Next;//第一个结点
while(p)
{
q = p->Next;
free(p);
p = q;
}
L->Next = NULL;
return bingo;
}