Да се позволи въвеждането на две редици от по N цели числа, подредени в нарастващ ред. Да се изведе обединената редица, съдържаща всички числа от двете редици, отново подредени по нарастващ ред.
По желание: Да се реши задачата, ако не е известно колко числа има в първите две редици.


#include <cstdlib> #include <iomanip> #include <iostream> using namespace std; // максимален брой елементи в опашката const int N=50; struct opashka { // указател към върха на опашката int head = 0; // указател към края на опашката int tail = 0; // масив за съхранение на елементите на опашката int s[N]; }; // инициализиране на опашката void init(opashka &q) { q.head=0; q.tail=0; for(int i=0;i<=N;i++) q.s[i]=0; } // проверка дали опашката е празна bool isEmpty(const opashka &q) { return q.head==q.tail; } // проверка дали опашката е пълна bool isFull(opashka &q) { return ((q.tail+1)%N)==q.head; } // запис на стойност в опашката bool push(int X, opashka &q) { bool ok = !isFull(q); if (ok){ q.s[q.tail] = X; q.tail++; q.tail%=N; } return ok; } // извличане на стойност от опашката bool pop(int &X, opashka &q) { bool ok = !isEmpty(q); if (ok) { X = q.s[q.head]; q.head++; q.head%=N; } return ok; } int main ( ) { opashka a,b,c; // инициализираме опашките init(a); init(b); init(c); int x; int y; cout<<"Vavedi stoinostite na purvata opashka(0 za krai)"<<endl; do{ cin>>x; if(x==0) break; push(x,a); } while(true); cout<<"Vavedi stoinostite na vtorata opashka(0 za krai)"<<endl; do{ cin>>x; if(x==0) break; push(x,b); } while(true); bool pushed_x=true, pushed_y=true; while(!isEmpty(a) || !isEmpty(b)){ if(!isEmpty(a)) if(pushed_x) pop(x,a); if(!isEmpty(b)) if(pushed_y) pop(y,b); if(x!=0 && y!=0) if(x<y){ push(x,c); x=0; pushed_x=true; pushed_y=false; } else { push(y,c); y=0; pushed_y=true; pushed_x=false; } else if(x!=0 && y==0) { push(x,c); pushed_x=true; pushed_y=false; } else if(x==0 && y!=0) { push(y,c); pushed_y=true; pushed_x=false; } } /* Ако е останало число, което не е добавено към опашка C, обаче опашка A и B са празни(цикъла по-горе няма да се изпълни) - тук го добавяме */ if(!pushed_x && x!=0) push(x,c); if(!pushed_y && y!=0) push(y,c); cout<<endl; while(!isEmpty(c)){ pop(x, c); cout<<x<<endl; } cout<<endl; return 0; }Браво – избрал си да реализираш и допълнителното условие :-) Хубаво си се сетил, че опашките няма как да съдържат 0 и че едната може доста да изчаква другата. Но ти е ненужно усложнен кода и няма коментари – ще го дообсъдим в часа.