目录
1.单链表的基础知识
(1)数据域+指针域
(2)hesd指针为单链表的头指针
(3)链表中的最后一个结点的指针域定义为空指针(NULL)
2.链表的建立
node *createlist()
{
node *head,*p,*s;
head=(node*)malloc(sizeof(node))
p=head;
for(int i=0;i<10;i++)
{
s=(node*)malloc(sizeof(node));
s->data=rand()%10;
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
3.链表的输出
void outlist(node *head)
{
node *p=head->next;
while(p!=NULL)
{
printf("->%d",p->data);
p=p->next;
}
}
4.结点的顺序访问
(1)链表结点数据和
while(p!=NULL)
{
sum+=p->data;
p=p->next;
}
(2)链表结点的平均值
double fun(STREC *h)
{
STREC *p=h->next;
double sum=0.0,ave=0.0;
while(p!=NULL)
{
sum+=p->data;
p=p->next;
}
ave=sum/N;
return ave;
}
(3)链表结点的最大值
double fun(STREC *h)
{
STREC *p=h-next;
double max=p->s;
while(p!=NULL)
{
if(p->s>max) max=p->s;
p=p->next;
}
return max;
}
5.链表结点的插入
(1)插入结点的位置 p和q
(2) q->next=s; s->next=p;
void insertnode(node *head,int key,int d)
{
node *q,*p=head->next;
node *s=(node *)malloc(sizeogf(node));
s->data=d;
while(p!=NULL&&p->data!=key)
{
q=p;
p=p->next;
}
if(p==NULL)
{
p->next=s;
s->next=NULL;
}
else
{
q->next=s;
s->next=p;
}
}
6.链表结点的删除
q->next=p->next;
free(p);
void deletenode(node *head,int key)
{
node *p,*q;
p=head->next;
q=head;
while(p!=NULL && p->data!=key)
{
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
7.链表结点数据域的排序
void sortlist(node *head)
{
node *p,*q;
int t;
p=head->next;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->data>q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
q=q->next;
}
p=p->next;
}
}