存储数据元素信息的域–数据域
存储直接后继位置的域–指针域
这两部分组成结点(Node)
单链表:每个结点只包含一个指针域
第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)。
typedef struct Node
{
int data; //数据域
struct Node* next; //指针域
}Node;
typedef struct Node* LinkList;
查询
int GetElem(LinkList L,int i,int e)
{
int j;
LinkList p;
p=L->next; //p指向L的第一个结点
j=1;
while(p && j<i)
{
p = p->next;
++j;
}
if(!p || j>i)
return 0;
e=p->data;
return 1;
}
插入
int ListInsert(LinkList L,int i,int e)
{
int j;
LinkList p,s;
p=L->next; //p指向L的第一个结点
j=1;
while(p && j<i) //寻找第i个结点
{
p = p->next;
++j;
}
if(!p || j>i)
return 0;
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
删除
int ListDeltete(LinkList L,int i)
{
int j;
LinkList p,q;
p=L->next; //p指向L的第一个结点
j=1;
while(p && j<i) //寻找第i个结点
{
p = p->next;
++j;
}
if(!p || j>i)
return 0;
q=p->next;
p->next=q->next;
//相当于p->next = p->next->next;
free(q->next)
return 1;
}
头插法建立单链表
void CreatListHead(LinkList L)
{
LinkList p;
int i;
srand(time(0)); //生成随机数
L=(LinkList)malloc(sizeof(Node));
L->next = null;
for(i=0;i<100;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data = rand()%/100+1; //生成0-100的随机数
p->next = L->next; //把表头所指的数据托付给了p指向
L->next = p; //表头指p
}
}
尾插法建立单链表
void CreatListHead(LinkList L)
{
LinkList p,r;
int i;
srand(time(0)); //生成随机数
L=(LinkList)malloc(sizeof(Node));
r=L;
for(i=0;i<100;i++)
{
p=(LinkList *)malloc(sizeof(Node));
p->data = rand()%/100+1;
r->next = p;
r = p;
}
r->next = null;
}
整表删除
int ClearList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
L->next=null;
return 1;
}