08年以前华中科大的一道机试题

来源:互联网 发布:禁止软件安装 编辑:程序博客网 时间:2024/05/12 05:53
/*08年以前的题目(1) 输入一个数列以0位结束标志,建立链式线性表,查找其中最大的数  并输出删除释放节点,然后对剩余的进行排序,并输出释放节点。*//*算法思想:1.头插法建立单链表             2.顺序查找一次,找出最大值,并删除该节点            3.将剩余的进行冒泡排序(升序) 4.将排好序后的链表逐个输出 *//*程序:*************************爱X的味道*****************************/#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;}node,*Linklist;/*初始化空链表*/void InitLinklist(Linklist *L){*L=(Linklist)malloc(sizeof(node));(*L)->next=NULL;}/*头插法建立单链表*/void CreateFromHead(Linklist L){int tmp;node *s;printf("please input the data! \n");scanf("%d",&tmp);while(0!=tmp){s=(node *)malloc(sizeof(node));s->data=tmp;s->next=L->next;L->next=s;scanf("%d",&tmp);}printf("Input finished !\n\n");}/*查找最大元素并输出,并删除该节点*/void Search(Linklist L){int tmp=0;Linklist cur=L->next,position=L,q=L;tmp=cur->data;position=cur;while(cur!=NULL){if(tmp<cur->data){tmp=cur->data;position=cur;}cur=cur->next;}printf("MAX is %d\n\n",tmp);while(q->next!=position)q=q->next;q->next=position->next;free(position);}/*剩余节点按升序排序,冒泡算法*/void Sort(Linklist L){Linklist cur,p;if((!L->next)||(!L->next->next)) return ;cur=L->next;p=L->next->next;while(cur->next!=NULL){while(p!=NULL){if((cur->data)>(p->data)){cur->data=(cur->data)^(p->data);p->data=(cur->data)^(p->data);cur->data=(cur->data)^(p->data);}p=p->next;}cur=cur->next;p=cur->next;}}/*排序后的链表逐个输出*/void Output(Linklist L){Linklist cur;cur=L->next;printf("最后顺序为(升序): \n\n");while(cur!=NULL){printf("%d ",cur->data);cur=cur->next;}printf("\n\n");}int main(){Linklist L;L=NULL;InitLinklist(&L);CreateFromHead(L);Search(L);Sort(L);Output(L);return 0;}

 
原创粉丝点击