入手链表
链表 动态的链接空间 头有尾空中不断
先说说链表的构建吧 课本上介绍的是尾插法
linklist build()
{
linklist head,tail,q;
int i;
head=tail=NULL;
for(i=1;i<=8;i+=2)
{
q=(linklist)malloc(sizeof(linknode));
q->data=i+2;//?
if(head==NULL) head=tail=q;
else
{
tail->next=q;
tail=q;
}
}
if(tail!=NULL) tail->next=NULL;//这里得重视。。
return head;
}
尾插法需要借助一个始终指向链表尾部的指针 tail
然后是常见 的插入 搜索 排序
linklist linkse(linklist head,int x)
{
linklist q=head,z;
z=q;
while(q!=NULL&&q->data<=x)
{
z=q;
q=q->next;
}
return z;
}
void linkinsert(linklist q,int x)
{
linklist p;
p=(linklist)malloc(sizeof(linknode));
p->data=x;
p->next=q->next;
q->next=p;
}
void output(linklist head)
{
linklist q=head;
while(q!=NULL)
{
printf("%5d",q->data);
q=q->next;
}
printf("\n");
}
值得一提就是编写链表的习惯问题了 每一个节点 在编写的时候都要注意是否与上下的联系上了 是否正确赋值了 在插入节点的时候 可以不用中间变量
最后贴一个排序
void linksort(linklist head)
{
int temp;
linklist i,j;
i=head;
while(i!=NULL)
{
j=i->next;
while(j!=NULL)
{
temp=i->data;
if(j->data >= temp)
{
temp=j->data;
j->data=i->data;
i->data=temp;
}
j=j->next;
}
i=i->next;
}
}