2009年4月2日 星期四

C語言的範例 –連接兩個鏈結串列

C語言的範例 連接兩個鏈結串列
題目:連接兩個鏈表。 
1.程式分析: 
2.程式源代碼: 
#include "stdlib.h" 
#include "stdio.h" 
struct list 
{ int data; 
struct list *next; 
}; 
typedef struct list node; 
typedef node *link; 
link delete_node(link pointer,link tmp) 
{if (tmp==NULL) /*delete first node*/ 
 return pointer->next; 
else 
{ if(tmp->next->next==NULL)/*delete last node*/ 
  tmp->next=NULL; 
 else /*delete the other node*/ 
  tmp->next=tmp->next->next; 
 return pointer; 
} 
} 
void selection_sort(link pointer,int num) 
{ link tmp,btmp; 
 int i,min; 
 for(i=0;i 
 { 
 tmp=pointer; 
 min=tmp->data; 
 btmp=NULL; 
 while(tmp->next) 
 { if(min>tmp->next->data) 
 {min=tmp->next->data; 
  btmp=tmp; 
 } 
 tmp=tmp->next; 
 } 
printf("\40: %d\n",min); 
pointer=delete_node(pointer,btmp);

} 
} 
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=1;i 
{ tmp2=(link)malloc(sizeof(node)); 
 tmp2->next=NULL; 
 tmp2->data=array[i]; 
 tmp1->next=tmp2; 
 tmp1=tmp1->next; 
} 
return pointer; 
} 
link concatenate(link pointer1,link pointer2) 
{ link tmp; 
tmp=pointer1; 
while(tmp->next) 
 tmp=tmp->next; 
tmp->next=pointer2; 
return pointer1; 
} 
void main(void) 
{ int arr1[]={3,12,8,9,11}; 
 link ptr; 
 ptr=create_list(arr1,5); 
 selection_sort(ptr,5); 
}