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

Очередь, работа с точками. - C++

Восстановить пароль Регистрация
 
Zerkyuseo
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 5
22.12.2011, 22:34     Очередь, работа с точками. #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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include<iostream.h>
 
//nachalo - указатель на начало очереди. 
//konec - указатель на конец очереди.
 
struct node
{
int elem;
node *sled;
};
class Spisok 
{
private:
node *nachalo,*konec;
int klad;
public:
Spisok () {nachalo=konec=NULL;}
void Postroenie ();
void Vyvod ();
void Dobavlenie (int);
int  Set_Udal () { return klad; }
void Ydalenie ();
void Ochistka();
};
 
void main ()
{
Spisok A;
int el;
A.Postroenie ();
A.Vyvod ();
cout<<"Введите добавляемый элемент: ";
cin>>el;
A.Dobavlenie (el); A.Vyvod ();
cout<<"Удалим элемент из очереди.\n";
A.Ydalenie (); A.Vyvod ();
el=A.Set_Udal();
cout<<"Информационное поле удаленного звена: "<<el<<endl;
A.Ochistka();
}
 
void Spisok::Postroenie () 
{
node *r;
int el;
cout<<"Вводите элементы очереди:\n";
cin>>el;
if  (el!=0)
{
r = new (node);
(*r).elem = el; (*r).sled = NULL;
nachalo = r; konec = r; cin>>el;
while  (el!=0)
{
r = new (node);
(*r).elem = el; (*r).sled = NULL;
(*konec).sled = r; konec = r; cin>>el;
}
}
else
{r = NULL; nachalo = r; konec = r;}
}
 
void Spisok::Vyvod ()
{
node *r;
cout<<"Очередь: "; r = nachalo;
while  (r!=NULL)
{
cout<<(*r).elem<<" "; r = (*r).sled;
}
cout<<endl;
}
 
void Spisok::Dobavlenie (int el)
{
node *r;
r = new (node);
(*r).elem = el; (*r).sled = NULL;
if  (nachalo!=NULL)
{
(*konec).sled = r; konec = r;
}
else
{nachalo = r; konec = r;}
}
 
void Spisok::Ydalenie ()
//nachalo и konec, с помещением его информационного поля в 
//параметр klad.
{
node *q;
if  (nachalo==NULL)
cout<<"Удалить нельзя, так как очередь пуста!\n";
else
{
klad = (*nachalo).elem; q = nachalo;
nachalo = (*nachalo).sled; delete q;
}
}
 
void Spisok::Ochistka()
//Возврат выделенной памяти в "кучу"
{
node *q;
q=nachalo;
if (nachalo!=NULL)
{
while (nachalo!=konec)
{
nachalo=(*q).sled;
delete q;  q=nachalo; }
delete nachalo;
nachalo=konec=NULL;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 22:34     Очередь, работа с точками.
Посмотрите здесь:

C++ Работа со списком типа очередь
C++ Преобразовать строку, заменив точками все двоеточия, встречающиеся среди первых n/2 символов, и заменив точками все восклицательные знаки...
Потоки.Работа с файломи.Очередь.Стек. C++
Задача на очередь (вывод сообщения, что очередь пуста) C++
C++ Очередь (сделать очередь, чтобы добавляло, удаляло, читало. Не STL.)
Работа с файлами (считать очередь, вывести на экран, дополнить ее элементами и перезаписать в фай) C++
C++ найти максимальное и минимальное значение между точками и вывести их вместе с точками
Очередь, теория. Очередь на шести стеках C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.12.2011, 00:27     Очередь, работа с точками. #2
По-уму тут надо еще итераторы добавить, но будем упрощать.

Очередь классическая -- FIFO.Ни одного метода, больше трех строчек, в коде нет. Пример работы классов упрощен.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <cstdlib>
#include <ctime>
 
struct NodeBase {
  NodeBase() : next(this), prev(this) {}
  NodeBase(NodeBase *next_, NodeBase *prev_)
    : next(next_), prev(prev_) {
    next->prev = this;
    prev->next = this;
  }
  virtual ~NodeBase() {
    next->prev = prev;
    prev->next = next;
  }
  NodeBase *next;
  NodeBase *prev;
};
 
template <class T>
struct Node : public NodeBase {
  Node(NodeBase *next_, NodeBase *prev_, const T &data_)
    : NodeBase(next_, prev_), data(data_) {}
  T data;
};
 
template <class T>
class Queue {
 public:
  Queue() : base() {}
  ~Queue() {
    clear();
  }
  void pushBack(const T &data) {
    new Node<T>(&base, base.prev, data);
  }
  T front() const {
    return (static_cast< Node<T>* >(base.next))->data;
  }
  T popFront() {
    T data = front();
    delete base.next;
    return data;
  }
  void clear() {
    while (!isEmpty())
      delete base.next;
  }
  bool isEmpty() const {
    return base.next == &base;
  }
  friend std::ostream &operator<<(std::ostream &stream, Queue &queue) {
    for (NodeBase *node = queue.base.next; node != &queue.base; node = node->next)
      stream << ((Node<T>*)node)->data << " ";
    return stream;
  }
 private:
  NodeBase base;
};
 
class Point {
 public:
  Point(int x, int y) : x_(x), y_(y) {}
  int getX() const { return x_; }
  void setX(int value) { x_ = value; }
  int getY() const { return y_; }
  void setY(int value) { y_ = value; }
  static Point random() {
    return Point(rand() % 10, rand() % 10);
  }
 private:
  int x_, y_;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &point) {
  return stream << "[" << point.getX() << ":" << point.getY() << "]";
}
 
template <class Q, class Generator>
void generate_n(Q &queue, Generator generator, size_t n) {
  while (n-- > 0)
    queue.pushBack(generator());
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  Queue<Point> queue;
  generate_n(queue, Point::random, 3);
  std::cout << "All points: " << queue << std::endl;
  std::cout << "Popping one-by-one:" << std::endl;
  while (!queue.isEmpty())
    std::cout << queue.popFront() << std::endl;
}

Не по теме:

Цитата Сообщение от Zerkyuseo Посмотреть сообщение
Информационное поле удаленного звена
Убило.

Zerkyuseo
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 5
24.12.2011, 02:31  [ТС]     Очередь, работа с точками. #3
Спасибо большое вам!
Yandex
Объявления
24.12.2011, 02:31     Очередь, работа с точками.
Ответ Создать тему
Опции темы

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