/*链表的删除:三种情况,头节点,中节点,尾节点
/*
/*selection_sort()遍历整个连表,并找出最大值
/*****************************
#include <stdio.h>
#include <stdlib.h>
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
link delete_node(link pointer,link tmp)
{
link deletenode;
if(tmp==NULL) //delete the first node
{
tmp=pointer->next;
free(pointer);
return tmp; //always renturn the first node's pointer
}
else //not the first node then ..
{
if(tmp->next->next==NULL) //delete the last node
{
deletenode=tmp->next;
tmp->next=NULL;
free(deletenode);
}
else
{
deletenode=tmp->next; //delete the middle node
tmp->next=tmp->next->next;
free(deletenode);
}
return pointer;
}
}
void selection_sort(link pointer,int num)
{
link tmp,btmp;
int i, min;
for(i=0;i<num;i++)
{
tmp=pointer;
min=tmp->data;
btmp=NULL;
while(tmp->next) //遍历整个链表
{
if(min>tmp->next->data)
{
min=tmp->next->data;
btmp=tmp; //find the delete node
}
tmp=tmp->next;
}
printf("%d/n",min);
pointer=delete_node(pointer
}
}
link create_list(int array[],int num)
{
link tmp1,tmp2,pointer;
int i;
pointer = (link)malloc(sizeof(node));
pointer->data=array[0];
tmp1=pointer;
for(i=0;i<num;i++)
{
tmp2=(link)malloc(sizeof
tmp2->next=NULL;
tmp2->data=array[i];
tmp1->next=tmp2;
tmp1=tmp2;
}
return pointer;
}
{
int arr[]={3,12,8,9,11};
link ptr;
ptr=create_list(arr,5);
selection_sort(ptr,5);
system("pause");
}
==================================================================
/*****************************************/
/*
/*冒泡算法
/*注意头节电,中间节点,尾节点的处理
/*****************************************/
#include <stdio.h>
#include <stdlib.h>
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
link create_list(int array[],int num) // {
link tmp1,tmp2,pointer;
int i;
pointer=(link)malloc(sizeof(node)); //¶¯Ì¬µÄ·ÖÅäÄÚ´æ¿Õ¼ä
pointer->data=array[0]; //ÊäÈëµÚÒ»¸öÔªËØ
tmp1=pointer;
for(i=0;i<num;i++)
{
tmp2=(link)malloc(sizeof(node));
tmp2->data=array[i];
tmp2->next=NULL;
tmp1->next=tmp2;
tmp1=tmp2;
}
return pointer;
}
void bubble_sort(link pointer,int num)
{
link tmp;
int i,j,k;
for(i=1;i<num;i++)
{
tmp=pointer;
for(j=1;j<num;j++)
{
if(tmp->data>tmp->next->data)
{
k=tmp->data;
tmp->data=tmp->next->data;
tmp->next->data=k;
}
tmp=tmp->next;
}
}
}
//´òÓ¡
void print_list(link pointer)
{
while(pointer)
{
printf("%d/n",pointer->data);
pointer=pointer->next;
}
}
//²åÈëÔªËØ
link insert_node(link pointer,link btmp,int value)
{
link newnode;
if(btmp==NULL) //头节点
{
newnode=(link)malloc(sizeof(node));
newnode->data=value;
newnode->next=pointer;
return pointer;
}
else
{
if(btmp->next==NULL) //尾
{
newnode=(link)malloc(sizeof(node));
newnode->data=value;
btmp->next=newnode;
newnode->next=NULL;
}
else //中间节点
{
newnode=(link)malloc(sizeof(node));
newnode->data=value;
newnode->next=btmp->next; //应先指明新节点的指向
btmp->next=newnode;
}
return pointer;
}
}
link search_insert_location(link pointer,int value)
{
link tmp,btmp;
int OTRUE=1;
tmp=pointer;
btmp=NULL;
while(tmp&&OTRUE)
{
if(value<tmp->data) //对新节点插入已排序的链表进行再排序
{
OTRUE=0;
}
else
{
btmp=tmp;
tmp=tmp->next;
}
}
pointer=insert_node(pointer,btmp,value);
return pointer;
}
void main()
{
int arr[]={3,12,8,9,11};
link ptr;
ptr=create_list(arr,5);
bubble_sort(ptr,5);
printf("print before insert node../n");
print_list(ptr);
ptr=search_insert_location(ptr,15);
printf("print after insert node 15../n");
print_list(ptr);
ptr=search_insert_location(ptr,7);
printf("print after insert node 7../n");
print_list(ptr);
system("pause");
}