链表数据内的增加原理:
#include<stdio.h>
struct Link
{
int data;
struct Link *next;
};
void printLink(struct Link *head)//遍历链表数据
{
struct Link *p=head;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
putchar('\n');
}
struct Link* insertFromBefore(struct Link *head,int inputdata,struct Link *new)//在链表内某个数前面增加数据,包括第一个数
{
struct Link *p=head;
if(p->data==inputdata)
{
new->next=head;
return new;
}
while(p->next!=NULL)
{
if(p->next->data==inputdata)
{
new->next=p->next;
p->next=new;
puts("insert ok");
return head;
}
p=p->next;
}
printf("%dthis data no existenz,insert error\n",inputdata);
return head;
}
void insertFromBehind(struct Link *head,int data,struct Link *new)//在链表内某个数后面增加数据
{
struct Link *p=head;
while(p!=NULL)
{
if(p->data==data)
{
new->next=p->next;
p->next=new;
}
p=p->next;
}
}
int getLinkTotalNum(struct Link *head)//计算链表内数据总数
{
struct Link *p=head;
int total=0;
while(p!=NULL)
{
total++;
p=p->next;
}
return total;
}
int searchLink(struct Link *head,int inputdata)//查询链表内的数据
{
struct Link *p=head;
while(p!=NULL)
{
if(p->data==inputdata)return 1;
p=p->next;
}
return 0;
}
int main()
{
int array[]={2,3,4,5,6,7};
int len=sizeof(array)/sizeof(array[0]);
int i;
for(i=0;i<len;i++)
{
printf("%d ",array[i]);
}
putchar('\n');
struct Link l1={1,NULL};
struct Link l2={2,NULL};
struct Link l3={3,NULL};
struct Link l4={4,NULL};
struct Link l5={5,NULL};
struct Link l6={6,NULL};
struct Link l10={10,NULL};
struct Link *head=&l1;
struct Link new={100,NULL};
l1.next=&l2;
l2.next=&l3;
l3.next=&l4;
l4.next=&l5;
l5.next=&l6;
printf("use l1 to print all nums\n");
printLink(head);
insertFromBehind(head,6,&l10);
puts("after insert behind");
printLink(head);
head=insertFromBefore(head,101,&new);
puts("after insert before");
printLink(head);
head=insertFromBefore(head,3,&new);
puts("after insert before");
printLink(head);
/* int total=getLinkTotalNum(head);
printf("total number=%d\n",total);
int res;
res=searchLink(head,2);
if(res==0)
{
puts("linktab no have 2");
}
else if(res==1)
{
puts("linktab have 2");
}
res=searchLink(head,8);
if(res==0)puts("linktab no have 8");
else puts("linktab have 8");
*/ // printf("%d %d %d %d\n",l1.data,(l1.next)->data,l1.next->next->data,l1.next->next->next->data);
return 0;
}