#include<stdio.h>
#include<stdlib.h>
struct LB
{
int data;
struct LB *next;
};
struct LB *Create();
void Shu(struct LB *head);
int main()
{
struct LB *List=NULL;
printf("请输入链表元素(输入-1回车结束输入):\n");
List=Create();
Shu(List);
return 0;
}
struct LB *Create() //在输入时就比较好大小插入,这种一般设置头结点方便插入
{
struct LB *head,*p,*p1,*temp;
head=(struct LB *)malloc(sizeof(struct LB));
head->next =NULL;
p=(struct LB *)malloc(sizeof(struct LB));
scanf("%d",&p->data );
p->next =NULL;
while(p->data !=-1) //这里我采用的头插法
{
if(head->next ==NULL) //表示插入第一个结点
{
head->next =p;
p1=p;
}
else if(p->data >p1->data ) //表示比这个大,那么需要往后查找到比它大的结点,然后在他前面插入,因此判断temp-》next作为扫描结点来判断是否比他大
{
temp=p1;
while(temp->next !=NULL)
{
if(temp->next ->data >p->data )
{
p->next =temp->next ;
temp->next =p;
temp=p;
break;
}
temp=temp->next ;
}
if(temp->next ==NULL) // 表示它目前最大,要插在末尾
{
temp->next =p;
temp=p;
}
}
else //表示比他小,那么就插入到它前面
{
p->next =p1;
head->next =p;
p1=p;
}
p=(struct LB *)malloc(sizeof(struct LB));
scanf("%d",&p->data );
p->next =NULL;
}
return head->next ;
}
void Shu(struct LB *head)
{
struct LB *p;
p=head;
while(p!=NULL)
{
printf("%-3d",p->data );
p=p->next ;
}
putchar('\n');
}
设 L 为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。
于 2022-10-21 15:35:53 首次发布