由于n不确定,故选择链表存储输入数据,这里选用一个无头结点的链表。编写创建链表、释放链表、排序三个函数,在主函数中调用这些函数来完成。代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "stdlib.h"
typedef struct node{
int n;
struct node *next;
}*NODE,node;
void freenode(NODE p){//释放链表
if(p->next) freenode(p->next);
free(p);
}
NODE CreateLink(void){//创建链表
int x;
NODE head,p;
if((p=head=(NODE)malloc(sizeof(node)))==NULL){//创建头结点
printf("Establish a head node failure...");
return NULL;
}
printf("Input some data(non-numeric end)...\n");
while(scanf("%d",&x)==1){
if((p->next=(NODE)malloc(sizeof(node)))==NULL){
printf("Failed to create node...");
freenode(head);
return NULL;
}
p->next->n=x;
p=p->next;
}
p->next=NULL;
p=head;//删除头结点
head=head->next;
free(p);
return head;
}
void mysort(NODE p){//奇数升排偶数降排
NODE p1,p2;
for(;p;p=p->next){
for(p1=p,p2=p1->next;p2;p2=p2->next)
if(p->n&1 && p2->n&1 && p1->n>p2->n)
p1=p2;
else if(!(p->n&1) && !(p2->n&1) && p1->n<p2->n)
p1=p2;
if(p1!=p){
p1->n^=p->n;
p->n^=p1->n;
p1->n^=p->n;
}
}
}
int main(void){
NODE head=CreateLink(),p;
mysort(head);//按要求排序
for(p=head;p;p=p->next)//打出来看看
printf("%d ",p->n);
freenode(head);
printf("\n");
return 0;
}