关于确定分割位置的循环条件还有疑问
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define SIZE 25000
//创建链表,typedef可以为结构体起别名,使结构体可以像int double那样直接调用
typedef struct Judg{
int *num;
int len;
int size;
}ju;
//初始化
ju initJudg(){
ju j1;
j1.num = (int*)malloc(SIZE*sizeof(int));
j1.len=0;
j1.size=SIZE;
return j1;
}
//判断奇偶型
ju parJudg(ju j1,int len){
int i,k=0,n=0,m=0;
int odd[10010];//记录奇数
int even[10010];//记录偶数
int temp;// 交换临时存放
int pose[10010];//临时存偶数的位置
int poso[10010]; //存放奇数的位置
int pos1;//记录分割点
for(i=0; i<len; i++){
if(j1.num[i-1]%2!=0&&j1.num[i+1]%2==0){
pos1=i;
break;//***有疑问,为什么此处不跳出循环结果错误 ***
}
}
//存偶数
for(i=0; i<pos1; i++){
if(j1.num[i]%2==0){
even[k]=j1.num[i];
pose[k]=i;
//printf("%d ",pose[k]);
k++;
}
else pose[k]=-1;
}
//存奇数
for(i=pos1; i<len; i++){
if(j1.num[i]%2!=0){
odd[m]=j1.num[i];
poso[m]=i;
m++;
}
else poso[m]=-1;
}
for(i=0; i<pos1; i++){
if(i==pose[n]){
temp=j1.num[i];
j1.num[i]=odd[n];
j1.num[poso[n]]=temp;
n++;
}
}
return j1;
}
//创建输出函数
void display(ju j1){
int i=0;
for(i=0; i<j1.len; i++){
printf("%d ",j1.num[i]);
}
}
//主函数
int main () {
ju j1=initJudg();//初始化赋值
int X;
int i;
while(scanf("%d",&X)){
if(X==0) break;
else{
j1.num[i]=X;
i++;
j1.len++;
}
}
j1=parJudg(j1,i);
display(j1);
free(j1.num);
return 0;
}