www.pudn.com > datastructor.rar > LinkList.C


#include  
#include  
typedef  int ElemType; 
typedef struct node     /*结点类型定义*/ 
{ 
	ElemType data;               /*数据域*/ 
   	struct node *next; /*next为指针域,指向该结点的后继*/ 
}JD; 
void createlist(JD** phead,int n) 
{ 
	int i; 
	JD *p; 
	*phead=NULL; 
	for(i=0;idata)); 
	      p->next=*phead; 
	      *phead=p; 
	} 
	p=(JD*)malloc(sizeof(JD)); 
	p->next=*phead; 
	*phead=p; 
} 
void printlist(JD* phead) 
{ 
	JD* p; 
	int j=0; 
	p=phead->next; 
	printf("This list is:"); 
	while(p!=NULL){ 
		printf("%d  ", p->data); 
		p=p->next; 
		j++; 
	} 
	printf("\nThe length of list is:%d\n",j); 
} 
JD* getitem(JD *L,int i) 
{ 
	int j=1; 
	L=L->next; 
	while(L!=NULL&&jnext; 
		j++; 
	} 
	return L; 
} 
void insertbefore(JD* L,int i, ElemType e) 
{ 
	JD *p,*s; 
	ElemType tmp; 
	p=getitem(L,i); 
	s=(JD*)malloc(sizeof(JD)); 
	s->data=e; 
	s->next=p->next; 
	p->next=s; 
	tmp=p->data; 
	p->data=s->data; 
	s->data=tmp; 
} 
void dellist(JD* L,int i) 
{ 
	JD *p,*s; 
	p=getitem(L,i-1); 
	s=p->next; 
	p->next=s->next; 
	free(s); 
} 
void mergelist(JD* La,JD* Lb,JD** Lc) 
{ 
	JD *pa,*pb,*pc; 
	pa=La->next; 
	pb=Lb->next; 
	pc=La; 
	*Lc=La; 
	while(pa&&pb){ 
		if(pa->data<=pb->data){ 
			pc->next=pa;pc=pa;pa=pa->next; 
		} 
		else{ 
			pc->next=pb;pc=pb;pb=pb->next; 
		} 
	} 
	pc->next=pa?pa:pb; 
	free(Lb); 
} 
void destroylist(JD *L) 
{ 
	JD *p; 
	while(L!=NULL) 
	{ 
		p=L; 
		L=L->next; 
		free(p); 
	} 
} 
int main() 
{ 
	JD *list1, *list2, *list3; 
	createlist(&list1,5); 
	printlist(list1); 
	list2=getitem(list1,3); 
	printf("The search result is :%d\n",list2->data); 
	insertbefore(list1,4,456); 
	printlist(list1); 
	dellist(list1,3); 
	printlist(list1); 
 
	/*test mergerlist*/ 
	createlist(&list2,3); 
	mergelist(list1,list2,&list3); 
	printlist(list3); 
	destroylist(list1); 
	 
	system("PAUSE"); 
    return 0;	 
}