* Сортиране чрез опашки

Като се използват структури от данни от тип „опашка“, да се изведат в нарастващ ред N на брой положителни числа, въведени в случаен ред.

Публикувано в 12в с етикети . Постоянна връзка.

2 коментара по * Сортиране чрез опашки

  1. kaloyan каза:
    #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;
    // инициализираме опашките
    init(a);
    init(b);
    
    int n,x;
    
    cout<<"Broi chisla: ";
    cin>>n;
    cout<<"Vavedi chislata:"<<endl;
    for(int i=0; i<n; i++){
        cin>>x;
        push(x,a);
    }
    
    while(!isEmpty(a)){
    	pop(x,a);
    	int min=x;
        for(int i=0; i<n-1; i++){
            pop(x,a);
            if(x<min){
                push(min,a);
                min=x;
            } else push(x,a);
        }
        push(min, b);
        n--;
    }
    
    cout<<endl;
    //Отпечатваме опашка b
    while(!isEmpty(b)){
        pop(x, b);
        cout<<x<<endl;
    }
    
    cout<<endl;
    return 0;
    } 

Вашият коментар