Форум программистов, компьютерный форум CyberForum.ru

Заполнение очереди положительными и отрицательными числами - C++

Восстановить пароль Регистрация
 
KyuH
Сообщений: n/a
07.05.2013, 00:56     Заполнение очереди положительными и отрицательными числами #1
Здравствуйте, помогите пожалуйста! Нужно заполнить очередь положительными и отрицательными числами. Что нужно дописать?
Полностью задание звучит так: "Разработать функцию, которая по одной очереди строит две новых: Queue1 из положительных элементов и Queue2 - из остальных элементов очереди."
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "stdafx.h"
#include <string.h>
#include "MyQueue_1.h"
#include <assert.h>
//------------------------------------------------------------------------
Queue CreateQueue(int n)            // выделить ресурса для очереди
{
 return *(new Queue(n));
};
//-----------------------------------------------------------------------
Queue CreateQueue(const Queue& pq)   // создать очередь по образцу
{
 Queue *rc = new Queue(pq.Size-1);   
 rc->Head = pq.Head;
 rc->Tail = pq.Tail;
 for (int i = 0; i < pq.Size; i++) rc->Storage[i] = pq.Storage[i]; 
 return *rc;
}
//-----------------------------------------------------------------------
bool  Enq(Queue& q, void* x)          // добавить x в очередь s
{
 bool rc = true;
 if (rc = !q.isFull())
 {
  q.Storage[q.Tail] = x;
  q.Tail=(q.Tail+1)%q.Size;
 }
 else 
 return false ; return rc; 
};
//-------------------------------------------------------------------------
void* Deq(Queue& q)                   // удалить элемент из очереди
{
void* rc = (void*)MYQUEUE1_EQE;
 if (!q.isEmpty())
 {
  rc = q.Storage[q.Head];
  q.Head=(q.Head+1)%q.Size;
 }
 return rc; 
}
//-------------------------------------------------------------------------
void* Peek(const Queue& q)
{
void* rc = (void*)MYQUEUE1_EQE;
 if (!q.isEmpty())
    rc = q.Storage[q.Head];
 return rc; 
}  
 
//-------------------------------------------------------------------------
int  ClearQueue(Queue& q)            // очистить очередь
{
    int rc =  (q.Tail - q.Head)>=0?(q.Tail - q.Head):(q.Size-q.Head+q.Tail+1);
 q.Tail = q.Head = 0;
 return rc;                           // количество элементов в очереди до очистки
}
//-------------------------------------------------------------------------
void ReleaseQueue(Queue& q)           // освободить ресурсы очереди
{
 delete[] q.Storage;
 q.Size = 1;
 q.Head = q.Tail = 0;
}
//---------------------------------------------------------------------------
void AppendQueue(Queue& to, const Queue& from)   // добавить одну очередь к другой ()
 
 
 { 
     for (int i = from.Head; i!= from.Tail; (++i)%from.Size) 
         Enq(to, from.Storage[i]); 
 }
 
//---------------------------------------------------------------------------
bool Queue::isFull() const {return (Head%Size == (Tail+1)%Size);};  // очередь заполненa ?
bool Queue::isEmpty()const {return (Head%Size == Tail%Size);};     // Очередь пустa ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Queue.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include "MyQueue_1.h"
#include <ctime>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct str2
{
    char b;
    long a;
};
    Queue q1= CreateQueue(6);
    Queue q2= CreateQueue(6);
    Queue q3= CreateQueue(6);
 
    int a1=-3;
    Enq (q1,&a1);
            while (!q1.isEmpty()){
                if (Peek(q1)<0){
                        Enq(q2, Peek(q1));}
                    else 
                    {
                        Enq(q3, Peek(q1));}
                    Deq(q1);
                }
 
  std::cout << "negatives:";
   while (!q2.isEmpty()) {
      std::cout << ' ' << Peek(q2);
     Deq(q2);
   }
   std::cout << std::endl;
 
   std::cout << "positives:";
   while (!q3.isEmpty()) {
      std::cout << ' ' << Peek(q3);
      Deq(q3);
   }
   std::cout << std::endl;
 
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 00:56     Заполнение очереди положительными и отрицательными числами
Посмотрите здесь:

C++ Заполнение одномерного массива и положительными, и отрицательными числами
C++ Прямоугольную матрицу размером м на н заполнить случайными положительными и отрицательными числами
Программа находит индексы с положительными и отрицательными элементами C++
C++ Определить, все ли числа являются положительными или положительные числа чередуются с отрицательными
C++ Задан файл с отрицательными и положительными целыми числами. Записать в другой файл сначала отрицательные, а потом положительные числа
C++ Разделить двухмерный массив на два линейных - с положительными и отрицательными числами
C++ Образовать из матрицы 2 массива с положительными элементами и отрицательными элементами по возрастанию
C++ Заполнить массив случайными положительными и отрицательными числами и вывести в строку с интервалом

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
07.05.2013, 01:29     Заполнение очереди положительными и отрицательными числами #2
как-то так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <queue>
 
using namespace std;
 
 
void show_queue(queue<int>&q)
{
    while(!q.empty())
    {
        cout<<q.front()<<' ';
        q.pop();
    }
}
 
void create_queue(queue<int> &main)
{
    queue<int> plus;
    queue<int> other;
    while(!main.empty())
    {
        main.front()>0 ? plus.push(main.front()) : other.push(main.front());
        main.pop();
    }
    show_queue(plus);
    cout<<endl;
    show_queue(other);
    cout<<endl;
}
 
void fill_queue(queue<int>&main)
{
    main.push(1);
    main.push(0);
    main.push(-1);
    main.push(-10);
    main.push(21);
}
 
int main()
{
    queue <int> main;
    fill_queue(main);
    create_queue(main);
    system("pause");
    return 0;
}
Извините, что код не очень грамотно написан - нет особо времени.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
07.05.2013, 10:36     Заполнение очереди положительными и отрицательными числами #3
Если не смущают функции с побочным эффектом, то вот простенький пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <queue>
#include <ctime>
#include <cstdlib>
 
template<class T>
void splitEvensAndOdds(std::queue<T> &source, std::queue<T> &evens,
  std::queue<T> &odds) {
  while (!source.empty()) {
    if (source.front() % 2 == 0) {
      evens.push(source.front());
    } else {
      odds.push(source.front());
    }
    source.pop();
  }
}
 
int main(int argc, char *argv[]) {
  std::queue<int> source, evens, odds;
  
  for (int i = 0; i < 100; ++i) {
    source.push(rand() % 11 - 5);
  }
 
  splitEvensAndOdds(source, evens, odds);
  
  for (; !evens.empty(); evens.pop()) {
    std::cout << evens.front() << " ";
  }
  std::cout << std::endl;
 
  for (; !odds.empty(); odds.pop()) {
    std::cout << odds.front() << " ";
  }
  std::cout << std::endl;
  
}
Yandex
Объявления
07.05.2013, 10:36     Заполнение очереди положительными и отрицательными числами
Ответ Создать тему
Опции темы

Текущее время: 08:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru