整个贴出来
#include <stdio.h>
#include <stdlib.h>
#define NUM 6
typedef struct node{
int data;
struct node *next;
}NODE;
NODE* create_rear(int a[], int n);
NODE* insert_sort(NODE* h, int x);
void output(NODE *h);
int main()
{
int a[NUM];
int i,x;
NODE *h;
printf("输入数组6个元素的值。");
for(i=0;i<NUM;i++){
scanf("%d",&a[i]);
}
h=create_rear(a,NUM);
printf("此链表各个结点的数据域为:");
output(h);
printf("\n输入要插入的数据x:");
scanf("%d",&x);
insert_sort(h,x);
printf("插入后链表各个结点的数据域为:");
output(h);
return 0;
}
NODE* create_rear(int a[], int n)
{
NODE *h=NULL,*p,*q;
int i;
for(i=0;i<NUM;i++)
{
p=(NODE*)malloc(sizeof(NODE));
p->data=a[i];
if(h==NULL)
{
h=p;
q=p;
}
else
{
q->next=p;
q=p;
}
}
q->next=NULL;
return h;
}
void output(NODE *h)
{
NODE *p;
p=h;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
NODE* insert_sort(NODE* h, int x)
{
NODE *p,*q,*s;
p=h;
q=p;
int i;
s=(NODE*)malloc(sizeof(NODE));
s->data=x;
if(x<p->data)
{
s->next=p;
h=s;
return h;
}
for(i=0;i<NUM-1;i++)
//在中间插入
{
p=p->next;
if(x<p->data)
{
s->next=q->next;
q->next=s;
break;
}
else
q=p;
}
if(x>p->data)
//在尾部插入
{
p->next=s;
s->next=NULL;
}
return h;
}