1.创建一个链表,调用插入函数和输出函数
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int date;
struct node *next;
}elemsn;//创建链表
elemsn *head=NULL,*tail;//定义全局变量头指针和尾指针
elemsn *creatlink();//链表创建的函数
elemsn *charu(elemsn *head,int *m);//插入数据的函数
void printlink(elemsn *head);//输出函数
int main(void)//主函数
{
head=creatlink();//用头指针接收创好的链表
int m;
printf("请输入待插入数据:\n");
scanf("%d",&m);
head=charu(head,&m);//传入链表的头和待插入数据的地址调用插入函数
printlink(head);//调用输出函数,传入链表的头
free(head);//释放空间
}
elemsn *creatlink()//链表的创建
{
int n;
elemsn *p;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
p=(elemsn *)malloc(sizeof(elemsn));
scanf("%d",&p->date);
p->next=NULL;
if(!head)
head=tail=p;
else
tail=tail->next=p;
}
return head;//将创好的链表返回给主调
}
elemsn *charu(elemsn *head,int *m)
{
elemsn *q;
elemsn *p;
q=(elemsn *)malloc(sizeof(elemsn));//为待插入数据分配空间
q->date=*m;
q->next=NULL;
if(head->date>*m)//判断待插入数据是否比头结点的值大
{
q->next=head;//如果比头结点的值小,则让待插入数据做新的头结点
head=q;
}
else//否则便利链表
{
for(p=head;!p=NULL;p=p->next)
{
if(p->next==NULL||p->next->date>*m)
{
q->next=p->next;
p->next=q;
break;
}
}
}
return head;//返回链表
}
void printlink(elemsn *head)//输出链表
{
elemsn *p;
for(p=head;p!=NULL;p=p->next)
printf("%d",p->date);
}