链表,动态内存管理
程序要求:程序中已经建立一个带有头结点的单向链表,链表中的各个结点按结点数值域中的数据从小到大顺序链接,函数fun的功能是:把形参新的值放入一个新结点并插入到链表中,插入后各个结点仍然保持从小到大的顺序排列。
#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));
/**********found**********/
s->data = x;
q = h;
p = h->next;
while (p != NULL && x > p->data)
{
/**********found**********/
q = p;
p = p->next;
}
s->next = p;
/**********found**********/
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");
}
}
void main()
{
SLIST *head;
int x;
int a[N] = {11, 12, 15, 18, 19, 22, 25, 29};
head = creatlist(a);
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);
}
运行结果
The list before inserting:
Head->11->12->15->18->19->22->25->29->End
Enter a number : 24
The list after inserting:
Head->11->12->15->18->19->22->24->25->29->End