算法分析:
输入数据时判断是偶数还是奇数,是奇数的存进A队列,是偶数的存进B队列;当A与B为非空时,删除A的一个元素,将此元素存进另一个数组中,A再执行一次相同的操作;B删除一个元素,存进数组中;如此循环操作,最后输出数组的元素。
1 2 #include<iostream> 3 #include<stdio.h> 4 #define MAXSIZE 1000 5 #define OVERFLOW -2 6 #define OK 1 7 #define ERROR -1 8 using namespace std; 9 typedef struct//定义结构 10 { 11 int *base; 12 int front; 13 int rear; 14 } SqQueue; 15 int InitQueue(SqQueue &Q)//初始化 16 { 17 Q.base=new int[MAXSIZE]; 18 if(!Q.base) 19 return OVERFLOW; 20 Q.front=Q.rear=0; 21 return OK; 22 } 23 int DeQueue(SqQueue &Q,int &e)//删除元素,赋值给e 24 { 25 if(Q.front==Q.rear)//队空 26 return ERROR; 27 e=Q.base[Q.front];//插入队头 28 Q.front=(Q.front+1)%MAXSIZE;//队头加一 29 return OK; 30 } 31 void Print(int arr[],int n)//用数组输出 32 { 33 cout<<arr[0]; 34 for(int i=1;i<n;i++) 35 cout<<" "<<arr[i]; 36 } 37 int main() 38 { 39 SqQueue A,B; 40 InitQueue(A); 41 InitQueue(B); 42 int N,data,tmp,i=0; 43 cin>>N; 44 int result[N]; 45 for(int i=0; i<N; i++) 46 { 47 cin>>data; 48 if(data%2!=0)//奇数放进A中 49 { 50 if((A.rear+1)%MAXSIZE==A.front)//已满 51 return ERROR; 52 A.base[A.rear]=data; 53 A.rear=(A.rear+1)%MAXSIZE;//队尾加一 54 } 55 else//偶数放进B中 56 { 57 if((B.rear+1)%MAXSIZE==B.front) 58 return ERROR; 59 B.base[B.rear]=data; 60 B.rear=(B.rear+1)%MAXSIZE; 61 } 62 } 63 while((A.front!=A.rear)&&(B.front!=B.rear))//A,B非空时 64 {//边删边存 65 DeQueue(A,tmp); 66 result[i++]=tmp; 67 DeQueue(A,tmp); 68 result[i++]=tmp; 69 DeQueue(B,tmp); 70 result[i++]=tmp; 71 } 72 while(A.front!=A.rear)//A的元素有剩 73 { 74 DeQueue(A,tmp); 75 result[i++]=tmp; 76 } 77 while(B.front!=B.rear)//B的元素有剩 78 { 79 DeQueue(B,tmp); 80 result[i++]=tmp; 81 } 82 Print(result,N); 83 return 0; 84 } 2020-04-2821:58:04
Make every effort!
浙公网安备 33010602011771号