(1)定义单链表,读取单链表中的元素
typedef struct Node//定义结点结构体
{
Elemtype data;//数据域
struct Node* next;//指针域
}Node;
typedef struct Node* Linklist;//定义数据类型,Linklist为结点类型
//单链表的读取
//用e返回L中第i个数据元素的值
int Getlink(Linklist L,int i;ELemtype *e)
{
int j;
Linklist p;//声明指针P
p=L->next;//让p等于L的第一个结点
j=1;
while(p&&j<i) //p不能为空
{
p=p->next;
++j;
}
if(!p||j>i)
{
return error;
}
*e=p->data;
return ok;
}
//头指针指向头结点,头结点数据域一般为空,头指针必要,头结点不必要
(2)单链表的插入
//单链表的插入
//在L中第i个位置之前插入新的数据元素e,L的长度加1
status Listinsert(Linklist *L,int i,ELemtype e)
{
int j;
Linklist p,s;//定义结构体指针
p=*L;
j=1;
whlie(p&&j<i)//寻找第i个结点
{
p=p->next;
j++;
}
if(!p||j>i)
{
return error;
}
s=(Linklist)malloc(sizeof(Node))//开辟一个新的结点
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
(3)单链表的删除
//单链表的插入
//删除L的第i个数据元素,并用e返回其值,L的长度减一
status Listinsert(Linklist *L,int i,ELemtype *e)
{
int j;
Linklist p;//定义结构体指针
// Linklist q;
p=*L;
j=1;
whlie(p->next&&j<i)//寻找第i个结点
{
p=p->next;
j++;
}
if(!p||j>i)
{
return error;
}
p->next=p->next->next ; //q=p->next;p->next=q->next;
*e=p->next
free(p->next) ;//free(q);
return ok;
}
(3)
//单链表的整表删除
//声明p和q;第一个结点赋值给p,下一个结点赋值给q;循环执行释放p和将q赋值给p的操作
status Clearlist(Linklist *L)
{
Linklist p,q;//定义结构体指针
p=(*L)->next; //第一个结点 ?
while(p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
return ok;
}
单链表的整表删除