06年華中科大機試第二題(用鏈表去對5個數字排序)

/*第二題是  用鏈表去對5個數字排序。*/
/*沒什麼特別的思想,就是一個創建鏈表並初始化,。然後來個冒泡排序即可*/

/*測試數據 :15 12 10 30 332  輸出結果: 10 12 15 30 332
             333 222 111 10 2           2 10 111 222 333*/

/*程序:*************************愛X的味道*****************************/

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
	int data;
	struct Node *next;
}Node,*Linklist;
/*尾插法建立單鏈表並初始化*/
void CreateLinklist(Linklist *L)
{
	Linklist p,q;
	int array[5];
	*L=(Linklist)malloc(sizeof(Node));
	(*L)->data=0;
	(*L)->next=NULL;
	p=*L,q=*L;
    printf("請輸入五個數,以空格隔開:\n");
	scanf("%d %d %d %d %d",&array[0],&array[1],&array[2],&array[3],&array[4]);
	for(int i=0;i<5;i++)
	{
		q=(Linklist)malloc(sizeof(Node));
		q->data=array[i];
		p->next=q;
		q->next=NULL;
		p=p->next;
	}
	p->next=NULL;
}
/*冒泡排序*/
void Sort(Linklist *L)
{
	Linklist p,q;
	if((NULL==(*L)->next) || (NULL== (*L)->next->next))
		exit(0);
	q=(*L)->next->next;
	p=(*L)->next;
    while(p->next!=NULL)
	{
		while(q!=NULL)
		{
			if((p->data)>(q->data))
			{
				p->data=(p->data)^(q->data);
				q->data=(p->data)^(q->data);
				p->data=(p->data)^(q->data);
			}
			q=q->next;
		}
		p=p->next;
		q=p->next;
	}
}
/*結果打印*/
void Display(Linklist L)
{
	Linklist p=L->next;
	printf("排好序後的結果如下: \n\n");
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n\n");
}
int main()
{
	Linklist L;
	CreateLinklist(&L);
	Sort(&L);
	Display(L);
	return 0;
}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章