版权声明:未经允许,不得转载 https://blog.csdn.net/frozennet/article/details/88685883
题目:建立一个带有头结点的单项链表,链表中的各个结点按照结点数据域中的数据递增有序连接。函数fun功能:把形参x的值放入一个新结点并插入到链表中,插入后各个结点数据域仍保持递增有序。
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 8
typedef struct list
{
int data;
struct list *next;
}SLIST;
void fun(SLIST *h,int x)
{
SLIST *p,*q,*s;
s=(SLIST *)malloc(sizeof(SLIST));
s->data=x;
q=h;
p=h->next;
while(p!=NULL&&x>p->data)
{
q=p;
p=p->next;
}
s->next=p;
q->next=s;
}
SLIST *creatlist(int *a)
{
SLIST *h,*p,*q;
int i;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{
q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
p->next=q;
p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{
SLIST *p;
p=h->next;
if(p==NULL)
printf("\nThe list is NULL\n");
else
{
printf("\nHead");
do{
printf("->%d",p->data);
p=p->next;
}while(p!=NULL);
printf("->End\n");
}
}
int main()
{
SLIST *head;
int x;
int Inta[N]={12,15,18,19,22,25,29};
head=creatlist(Inta);
printf("\nThe list before inserting:\n");
outlist(head);
printf("\nEnter a number: ");
scanf("%d",&x);
fun(head,x);
printf("\nThe list after inserting:\n");
outlist(head);
}
运行结果: