(1)初始化
//单链表的整表删除
//声明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;
}
(2)查找
//单链表查找
status Getelem(Linklist L,int i,Elemtype &e)
{
p=L->next;
j=1;
while(p&&j>i)
{
p=p-next;
++j;
}
if(!p||j>i)
{
printf("error");
}
e=p->data;
return ok;
}
(3)按值查找
//单链表按值查找
LNode *Locataelem(Linklist L,Elemtype e)
{
p=L->next;
while(p&&p->data!=e)
{
p=p->next;
}
return p;//返回地址
}
(4)插入
//单链表的插入
status Listinsert(Linklist &L,int i,Elemtype e)
{
p=L;
j=0;
while(p&&j<i-1)//查找第i-1个结点
{
p=p->next;
++j;
}
if(!P||j>i-1)
{
printf("error");
}
s=new LNode;//生成新的结点
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
(5)删除
//单链表的删除
status Listdelete(Linklist &L,int i)
{
p=L;
j=0;
while(p->next)&&(j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||(j>i-1))
printf("error");
q=p->next;
p->next=q->next;
return ok;
}
(6)前插法创建单链表
//前插法创建单链表
void Creatlist(Linklist &L,int n)
{
L=new LNode;
L->next=NULL;//创建带有头结点的空链表
for(i=0;i<n;i++)
{
p=new LNode;//生成新结点
cin>>p->data;
p->next=L->next;
L->next=p;//将新结点插入到头结点之后
}
}
(7)后插法创建
//后插法创建单链表
void Creatlist(Linklist &L,int n)
{
L=new LNode;
L->next=NULL;
r=L;//尾指针r指向头结点
for(i=0;i<n;i++)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;//r指向新的尾结点p
}
}