调整数组顺序使奇数位于偶数前面(栈和队列)

调整数组顺序使奇数位于偶数前面(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,奇数部分降序排列输出,偶数部分升序输出。

输入:

输入:

8 13 25 18 56 11 77 98

输出:

输出:

77 25 13 11 8 18 56 98

示例输入:

8 13 25 18 56 11 77 98

示例输出:

77 25 13 11 8 18 56 98

提示:

参考答案(内存最优[752]):

#include <stdio.h>  
#include <stdlib.h>  
#define Stack_Size 100  
#define MAX 500  
typedef struct {  
        int *top;  
        int *base;  
        int stacklength;  
        }Sqstack,*Pstack;  
    
                                           
 void InitStack(Pstack S)  
      {  
           S->base=(int *)malloc( Stack_Size*sizeof(int));  
           if(!S->base)  
               exit(1);  
            S->top=S->base;  
            S->stacklength=Stack_Size;  
      }  
void Push(Pstack S,int ch)  
      {  
           if(S->top-S->base>=Stack_Size)  
               exit(1);  
           *(S->top++)=ch;  
      }  
void Pop(Pstack S)  
      {   
            if(S->base==S->top)  
              exit(1);  
             S->top--;  
      }  
void Clear(Pstack S)  
     {  
           S->base=S->top;  
     }                                   
int main()  
{  
    int i,j,ch,k,s1,s2,flagx=0,flagy=0; 
	int x,y,z;
    char t; 
    Sqstack S;  
    int *p;     
    int Array[MAX],B[MAX]={0},C[MAX]={0};          
    InitStack(&S);    
	scanf("%d",&ch);
	Push(&S,ch);
    while((t=getchar())!=EOF){
		   scanf("%d",&ch);
           Push(&S,ch);  
    }
    for(p=S.base,i=0;p<S.top;p++,i++)  
          Array[i]=*p;  
    for(j=0;j<i;j++){
		if(Array[j]%2==1){
		   B[flagx]=Array[j];
		   flagx++;
		}
		else{
		    C[flagy]=Array[j];
			flagy++;
		}
	}
     for(x=0;x<flagx-1;x++)
		 for(y=0;y<flagx-x-1;y++)
			 if(B[y]<B[y+1]){
			    z=B[y];
				B[y]=B[y+1];
				B[y+1]=z;		 
			 }
	 for(x=0;x<flagy-1;x++)
		 for(y=0;y<flagy-x-1;y++)
			 if(C[y]>C[y+1]){
			    z=C[y];
				C[y]=C[y+1];
				C[y+1]=z;		 
			 }
	 for(x=0;x<=flagx-1;x++)
		 printf("%d ",B[x]);
     for(x=0;x<=flagy-1;x++)
		 printf("%d ",C[x]);
	 printf("\n"); 
     return 0;  
}  

参考答案(时间最优[0]):

#include <stdio.h>  
#include <stdlib.h>  
#define Stack_Size 100  
#define MAX 500  
typedef struct {  
        int *top;  
        int *base;  
        int stacklength;  
        }Sqstack,*Pstack;  
    
                                           
 void InitStack(Pstack S)  
      {  
           S->base=(int *)malloc( Stack_Size*sizeof(int));  
           if(!S->base)  
               exit(1);  
            S->top=S->base;  
            S->stacklength=Stack_Size;  
      }  
void Push(Pstack S,int ch)  
      {  
           if(S->top-S->base>=Stack_Size)  
               exit(1);  
           *(S->top++)=ch;  
      }  
void Pop(Pstack S)  
      {   
            if(S->base==S->top)  
              exit(1);  
             S->top--;  
      }  
void Clear(Pstack S)  
     {  
           S->base=S->top;  
     }                                   
int main()  
{  
    int i,j,ch,k,s1,s2,flagx=0,flagy=0; 
	int x,y,z;
    char t; 
    Sqstack S;  
    int *p;     
    int Array[MAX],B[MAX]={0},C[MAX]={0};          
    InitStack(&S);    
	scanf("%d",&ch);
	Push(&S,ch);
    while((t=getchar())!=EOF){
		   scanf("%d",&ch);
           Push(&S,ch);  
    }
    for(p=S.base,i=0;p<S.top;p++,i++)  
          Array[i]=*p;  
    for(j=0;j<i;j++){
		if(Array[j]%2==1){
		   B[flagx]=Array[j];
		   flagx++;
		}
		else{
		    C[flagy]=Array[j];
			flagy++;
		}
	}
     for(x=0;x<flagx-1;x++)
		 for(y=0;y<flagx-x-1;y++)
			 if(B[y]<B[y+1]){
			    z=B[y];
				B[y]=B[y+1];
				B[y+1]=z;		 
			 }
	 for(x=0;x<flagy-1;x++)
		 for(y=0;y<flagy-x-1;y++)
			 if(C[y]>C[y+1]){
			    z=C[y];
				C[y]=C[y+1];
				C[y+1]=z;		 
			 }
	 for(x=0;x<=flagx-1;x++)
		 printf("%d ",B[x]);
     for(x=0;x<=flagy-1;x++)
		 printf("%d ",C[x]);
	 printf("\n"); 
     return 0;  
}  

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注