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

Очередь,просто обьясните - C++

Восстановить пароль Регистрация
 
tubus1993
1 / 1 / 0
Регистрация: 15.04.2011
Сообщений: 17
28.11.2011, 23:31     Очередь,просто обьясните #1
Уважаймые друзья.Нужна помощь.Никак не могу найти хороший образей для очереди.
Мне нужен какой-нибудь элементарный образец,без шаблонов,без каких-либо узкоспециальных функций.
Просто очередь состаящая из чисел и манипуляции с указателями.А то в голове каша образовалась
Вот я написал просто класс
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 <conio.h>
#include <time.h>
 
using namespace std;
////////////////////////////////////////////////////////////////
class Queue               
   {
      private:
      int A;
      public:
      void inputprog(int d)       //ввод
      { 
           A = d;
      }
      void printprog()                  //выводит все числа
      { 
           cout << " " << A;
      }
      
      };
////////////////////////////////////////////////////////////////
int main()
   {
   srand(time(NULL));       
   Queue s1;   
   int k,n;
   cout<<"Vvedite kol-vo elementov ";
   cin>>k;
   for(int i=0;i<k;i++)
   {
   n=rand()%10;   
   s1.inputprog(n);
   s1.printprog();
   }
   getch();
   return 0;
   }
как мне его изменить что-бы получить очередь?
я конечно понимаю что это типо "первый зашел,первый вышел" Но как это сделать на правтике??

Добавлено через 1 час 16 минут
Вообще задача такая:

Создать объект типа «очередь». Перегрузить операторы ++ и -- как
функции-члены класса (постфиксные и префиксные): ++ добавляет
элемент в очередь (пустой элемент, например int i=0), -- извлекает

элемент из очереди. Оператор ! проверяет очередь на отсутствие
элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 23:31     Очередь,просто обьясните
Посмотрите здесь:

C++ Обьясните.
C++ Обьясните пожалуйста
Задача на очередь (вывод сообщения, что очередь пуста) C++
C++ обьясните пожалуйста!
Обьясните запись C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
28.11.2011, 23:47     Очередь,просто обьясните #2
Обычно очередь как самостоятельный контейнер не существует, а для своей реализации использует какой-нибудь другой контейнер. Интерфейс очереди хорошо описан в стандартном классе С++ std::queue

Вы моожете очередь реализовать либо с помощью массива фиксированной длины, либо с помощью динамически выделяемой памятью для каждого нового элемента, включаемого в очередь. Оператор ++ и -- очень легко определяются через уже существующий интерфейс очереди. Нужно просто видеть вашу реализацию очереди.

Добавлено через 6 минут
tubus1993,

Допустим у вас есть очередь queue (как-то там вы ее реализовали) и есть метод класса push, тогда оператор прединкремента ++ можно реализовать следующим образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class queue
{
public:
...
   queue & operator ++()
   {
      push( 0 );
      return ( *this );
   }
 
  ...
};
tubus1993
1 / 1 / 0
Регистрация: 15.04.2011
Сообщений: 17
30.11.2011, 18:55  [ТС]     Очередь,просто обьясните #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
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
77
78
#include <iostream>
#include <conio.h>
using namespace std;
 
class queue
{
private:
        struct Node
        {
           int value;
           Node* next;
        };
        Node* first;
        Node* last;
public:
queue()
{
   first=NULL;
   last=first;
}
void add(int v)
{
  if(first=NULL)
  {
  first=new Node;
  first->value=v;
  first->next=NULL;
  last=first;
  }
  else
  {
  Node* temp=new Node;
  temp->value=v;
  temp->next=NULL;
  temp->next=temp;
  last=temp;
  }
}
int isEmpty()
{
    return(first==NULL);
}
int remove()
{
    int result=0;
    if(!isEmpty())
    {
    result=first->value;
    Node* temp=first;
    delete temp;
    }
    return result;
}
~queue()
{
    while(!isEmpty())
    remove();
}
};
 
int main()
{
   queue q;
   cout<<"Enter elements queue\n";
   do
   {
      int c;
      cin>>c;
      if(c==0)
      {
          break;
      }
      q.add(c);
   }
   while (true);
   getch(); 
   return 0;
}
Вот я создал работоспособную очередь.Теперь мне надо заменить перегрузить ++ что-бы он работал как метод add,-- как remove() и ! как sEmpty(),так?
Сыроежка
Заблокирован
30.11.2011, 20:54     Очередь,просто обьясните #4
tubus1993,

Я бы ваш класс Node добавил бы конструктор

C++
1
2
3
4
5
6
        struct Node
        {
           Node( int x = 0 ) : value( x ), next( 0 ) {}
           int value;
           Node* next;
        };

Тогда бы функция add могла бы выглядеть следующим образом

C++
1
2
3
4
5
6
void add(int v)
{
  if(first=NULL)
  {
  first=new Node( x );
 ...
tubus1993
1 / 1 / 0
Регистрация: 15.04.2011
Сообщений: 17
30.11.2011, 23:13  [ТС]     Очередь,просто обьясните #5
хм,по вашему ошибку выдает
Сыроежка
Заблокирован
30.11.2011, 23:28     Очередь,просто обьясните #6
Цитата Сообщение от tubus1993 Посмотреть сообщение
хм,по вашему ошибку выдает
Это по вашему ошибку выдает, а не по моему!
tubus1993
1 / 1 / 0
Регистрация: 15.04.2011
Сообщений: 17
01.12.2011, 23:04  [ТС]     Очередь,просто обьясните #7
Хочу вывести на экран область value,но в самом классе данной области не видно,выдает ошибку `value' undeclared (first use this function) ,когда вписываю в методе
C++
1
cout<<value;
.C классами не содержащими структуры это прокатывало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 23:29     Очередь,просто обьясните
Еще ссылки по теме:

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди C++
Очередь, теория. Очередь на шести стеках C++

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
01.12.2011, 23:29     Очередь,просто обьясните #8
Цитата Сообщение от tubus1993 Посмотреть сообщение
Хочу вывести на экран область value,но в самом классе данной области не видно,выдает ошибку `value' undeclared (first use this function) ,когда вписываю в методе
C++
1
cout<<value;
.C классами не содержащими структуры это прокатывало.
Надо уточнить, в каком месте вы хотите ее вывести. Если внутри метода вашего класса queue, то надо писать Node::value. Если во внешнем блоке, то надо использовать оператор обращения к данным через объект класса. То еасть если есть объект

C++
1
queue q;
то

C++
1
q.Node::value
Yandex
Объявления
01.12.2011, 23:29     Очередь,просто обьясните
Ответ Создать тему
Опции темы

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