6-1单链表遍历
void Traverse ( LinkList L )
{
LinkList p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;//下移
}
}
6-2求单链表表长
int Length ( LinkList L )
{
LinkList p;
p=L->next;
int x=0;
while(p)
{
p=p->next;//下移
x++;
}
return x;
}
6-3求单链表元素序号
int Locate ( LinkList L, ElemType e)
{
int count=1;//无情计数器,从1开始。下面的第一个if判断若第一次就判得p指e,那就直接输出地址为1(首元结点嘛,题目也说了序号从1开始的)
LNode *p;//弄一个指针p
p=L->next;
while(p!=NULL)//只要p不是NULL,就一直循环下去。p是NULL,跳出循环
{
if(p->data==e)//当p所指为e时,即可输出地址
return count;
p=p->next;//否则,继续p=p->next
count++;//计数器再加
}
if(p==NULL)
return 0;
}
6-4统计单链表元素出现次数
int GetCount ( LinkList L,ElemType e )
{
int cnt=0;
while(L->data!=-1&&L->next!=NULL)
{
if(L->data==e)
{
cnt++;
}
L=L->next;
}
if(cnt==0)
return 0;
else
return cnt+1;/"?为啥加1
}
6-5带头结点的单链表就地逆置
void reverse ( LinkList L )
{
LinkList p=L->next,q;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
}
6-6带头结点的单链表插入操作
int insert_link ( LinkList L,int i,ElemType e)
{
int j=1;
LinkList p,s;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
6-7带头结点的单链表删除操作
int delete_link ( LinkList L,int i)
{
LinkList p,q;
int j=0;
p=L;
while((p->next)&&j<i-1)
{
p=p->next;
j++;
}
if(!(p->next)||(j>i-1))
return 0;
q=p->next;
p->next=q->next;
free(q);
return 1;
}
6-8在带头结点的单链表表尾处插入一个新元素
void insert ( LinkList L,ElemType e)
{
LinkList p=L,s;
while(p->next)
{
p=p->next;
}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
6-9删除非空单链表的表尾元素
1216





