#include<stdio.h>
#include<stdlib.h>
struct node //从小到大排序,任意取值
{
int num;
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
void create_link(Link * head)
{
*head = NULL;
}
void create_node(Link * new_node)
{
*new_node = (Link)malloc(sizeof(Node));
}
void insert_node_tail(Link * head,Link new_node)
{
Link p;
p = *head;
if(NULL==*head)
{
*head=new_node;
new_node->next=NULL;
}
else
{
while(p->next !=NULL)
{
p=p->next;
}
p->next=new_node;
new_node->next=NULL;
}
}
void insert_node_mid_sort(Link * head,Link new_node)
{
Link p;
Link q;
p=NULL;//总是被忽略
q=NULL;
q = *head;
p = *head;//若p=(*head)->next,那么少头结点的判断
if(NULL==*head)//p
{
*head = new_node;
new_node->next = NULL;
}
else
{
while(p !=NULL && p->num < new_node->num)//->next特别重要
{
q=p;
// q->next=p;//严重错误不是指向,是位置改变
p = p->next;//一定要理解这个写法
}
if(p == *head)
{
new_node->next = p;
*head=new_node;
}
else
{
new_node->next=p;
q->next = new_node;
}
}
}
void display_link(Link head)
{
Link p=NULL;
p = head;
if(NULL==p)
{
printf("Link is Empty!\n");
return; //这句不能少!!!流程返回,值不返回。
}
while(p != NULL)
{
printf("%5d",p->num);//与printf("%5d\n",p->num);不同
p = p->next;
}
printf("\n");
}
void release_link(Link * head)
{
Link p=NULL; //先赋值啊!!!
p=*head;
while(*head!=NULL) //这里不能写p,p被释放
{
p=*head;
*head=(*head)->next;
free(p);
}
}
int main()
{
Link head=NULL;
Link new_node=NULL;
srand((unsigned)time(NULL));//随机取值
int i;
create_link(&head);
for(i=0;i<10;i++)
{
create_node(&new_node);
new_node->num=rand()%100;//100以内
//new_node->num=i+1;
insert_node_mid_sort(&head,new_node);//!!将每个数排序!!
// insert_node_tail(&head,new_node);//用不着倒插
}
create_node(&new_node);//
display_link(head);
printf("Input new_node->num:");
scanf("%d",&new_node->num);//搞忘了,num是int型
insert_node_mid_sort(&head,new_node);//!!此程序写两次!!
create_node(&new_node);//
display_link(head);
release_link(&head);
create_node(&new_node);//
display_link(head);
return 0; //这句不能少!!!
}
输出结果
judy@judy-virtual-machine:~/桌面/ft$ gcc yx5.c -oyx5
yx5.c: In function ‘main’:
yx5.c:110:21: warning: implicit declaration of function ‘time’ [-Wimplicit-function-declaration]
srand((unsigned)time(NULL));//随机取值
^~~~
judy@judy-virtual-machine:~/桌面/ft$ ./yx5
10 13 17 27 33 55 70 81 83 85
Input new_node->num:89
10 13 17 27 33 55 70 81 83 85 89
Link is Empty!
judy@judy-virtual-machine:~/桌面/ft$