Премини към съдържанието

Препоръчан отговор


Здравейте! Имам задача на c++, която представлява :

-Да се състави функция за обединяване на две опашки, след което да се подредят елементите в нея в нарастваща последователност.

Доста пропуснах поради лични проблеми и сега като ми я дадоха задачата съм в шок и ужас. Колегите ми показаха някой неща но все пак ми е неясно.

В случая реално как се декларира тази опашка ? Реално 2 структури ли трябва да се направят ? След което как да ги обединя в една функция.. Просто такива примери не съм срещал и сега ми е една каша в главата. 

Ще съм благодарен ако някой ми обясни. Не искам код искам сам да го направя. Може пример, но не и тази задачка. Благодаря ! 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;

struct elem 
{
    int key;
    elem *next;
} ;

struct queue
{
    elem *start;
    elem *end;
} ;


int pop(queue &q)
{
    elem *p=q.start;
    int n=p->key;
    q.start=p->next;
    if (q.start==NULL) q.end=NULL;
    delete p;
    return n;
}

void push(queue &q, int n)
{
     elem *p=new elem;
     p->key = n;
     p->next= NULL;
     if (q.end) q.end->next=p;
     else q.start=p;
     q.end=p;
}

void merge(queue &q, queue &s)
{
     if (s.start==NULL) return;
     if (q.start==NULL) q.start=s.start;
     else q.end->next=s.start;
     q.end=s.end;
     s.start=NULL;
     s.end=NULL;
}

void init(queue &q, int n)
{
    q.start=NULL;
    q.end=NULL;
    for (int i=0; i<n; i++)
    { 
        int t=rand()%1000+1;
        push(q, t);
        cout<<t<<" ";
    }
    cout<<"\n\n";
}

void sort(queue q)
{
     elem *p=q.start;
     while (p)
     {
         int m=p->key;
         elem *s=p->next;
         while (s)
         {
              if (s->key<m)
              {
                   p->key=s->key;
                   s->key=m;
                   m=p->key;
              }
              s=s->next;
         }
         p=p->next;
     }
}

void print(queue q)
{
     elem *p=q.start;
     while (p) 
     {
         cout<<p->key<<" ";
         p=p->next;
     }
     cout<<"\n\n";
}

int main()
{
    queue q1, q2;
    srand(time(NULL));
    cout<<"Queue1: "; init(q1, 8);
    cout<<"Queue2: "; init(q2, 9);
    merge(q1,q2);
    cout<<"Merge : "; print(q1);
    sort(q1);
    cout<<"Sort  : "; print(q1);
    while (q1.start)  pop(q1);
}

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Горещи теми в момента

  • Подобни теми

    • от georgi999
      Здравейте от доста време ме затрудняват едни въпросчета между които винаги си мисля че има повече верни .Благодаря предварително
      1ВЪПРОС-Кое от следните твърдения е вярно
      А)всеки път когато създаваме и компилираме нов клас се създава съответен обект от class
      Б)всеки път когато създаваме и компилираме нов клас се създава класа class
      В) jvm не използва класа class
      2ВЪПРОС -кое от твърденията не е вярно ?
      А) конструкторите могат да се задават подразбиране
      Б)конструкторите са полиморфни и претоварени
      В)конструкторите не са полиморфни но са претоварени
      3 ВЪПРОС- Кое от следните твърдения не е вярно ?
      А)final, референция не означава че не може да се променя рефенираният от нея обект
      Б)всички private методи в един клас по подразбиране са final и могат да бъдат предефинирани 
      В)final референция означава че не може да се обвърже повторно в нови обекти.
    • от Jay Ed
      Здравейте! Имам проблем с една задачка по програмиране. Ще се радвам, ако успеете да ми помогнете! :)
      "Да се създаде програма, която пресмята лице на определен брой квадрати и определя кой от тях е с най - малка площ. Да се декларира структура, описваща квадрат чрез страна квадрата, да се дефинира масив от квадрати и масив от площите на тези квадрати. Търсенето на площ на квадрат, както и на най - малката стойност, да се реализира с отделни функции."
    • от Wilhelm
      Здравейте, трябва ми спешна помощ за решение на тази задача по два варианта най-късно до утре! Ще съм ви длъжен!
       
       
    • от FlippyBG
      Здравейте хора, кякой може ли да каже как да оправя програмата. Мерси предварително.
      Да се направи функция за копиране на дадена опашка C++ 
       
      #include <iostream>
      using namespace std;
      struct elem
      {
          int key; elem *next;
      };
      void push(elem * &first, elem * &last, elem * p, int n);
      int pop(elem * &first, elem * &last, elem * &p, int &n);
      void copyQueue(elem * first, elem * last, elem * p, elem * &first2, elem * &last2, elem * &p2, int num);
      int main()
      {
          int num;
          elem *first = NULL, *last = NULL, *p;
          elem *first2 = NULL, *last2 = NULL, *p2;

          cout << "\n ~~~ Enter a symbol to stop entering numbers ~~~\n";
          cout << "\n Enter numbers:  \n";
          while (cin >> num)
              push(first, last, p, num);
          cout << "\n The numbers are:  \n";
          //while (pop(first, last, p, num))
      //    {
      //        cout << num << " ";
      //    }

          copyQueue(first, last,p , first2, last2, p2, num);
          while (pop(first2, last2, p2, num))
          {
              cout << num << " ";
          }
          cout << "\n";
          while (pop(first, last, p, num))
          {
              cout << num << " ";
          }
      }
      void push(elem * &first, elem * &last, elem * &p, int n)
      {
          p = last;
          last = new elem;
          last->key = n;
          last->next = NULL;
          if (p != NULL) p->next = last;
          if (first == NULL)
          {
              first = last;
          }
      }
      int pop(elem * &first, elem * &last, elem * &p, int &n)
      {
          if (first)
          {
              n = first->key;
              p = first;
              first = first->next;
              if (first == NULL) last = first;
              delete p;
              return 1;
          }
          else
              system("pause");
          return 0;
      }
      void copyQueue(elem * first, elem * last, elem * p, elem * &first2, elem * &last2, elem * &p2, int num)
      {
          while (pop(first, last, p, num))
          {
              push(first2, last2, p2, num);
          }
      }
       
  • Дарение

×
×
  • Добави ново...