初学数据结构记录(3)——调整顺序表左奇右偶

关于确定分割位置的循环条件还有疑问

#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;
} 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值