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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.59
NAG
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
#1

Список типа "ОЧЕРЕДЬ" - C++

22.09.2009, 02:06. Просмотров 2720. Ответов 6
Метки нет (Все метки)

Вопрос №1:
Что такое "список типа очередь"? // нужно сформировать массив
Где-то слишал, что это массив из элементов, предидущий елемент котрого включает в себя адрес следующего // думаю, что создать масив записей, с двумя полями "число" и "адрес"
Если мое предположение правильное, то
Вопрос №2:
как работать с адресами, определять и.т.д. С помощью указателей? Коль да, то КАК?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2009, 02:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список типа "ОЧЕРЕДЬ" (C++):

Однонаправленный список типа "Очередь". Поменять элементы местами - C++
Всем привет. Есть такая вот задачка: Поменять местами наибольший среди отрицательных и наименьший среди положительных элементов...

Иерархия классов "список"-"очередь", вызов метода через класс интерфейс - C++
Есть небольшая иерархия классов, контейнер (список) для хранения объектов каждого класса, контейнер (очередь) с указателями на объект...

класс Lqueue, структура типа "очередь" - C++
Создать класс Lqueue - структура типа "очередь", что базируется на структуре связного списка. Тип значения, хранящиеся в очереди, выбрать...

Игра "Однорукий бандит". Кольцевая очередь. Двусвязный список - C++
Здраствуйте. Задание: "Создать игру "Однорукий бандит". При нажатии кнопки Enter происходит "вращение" трех барабанов (количество...

Списки типа "ОЧЕРЕДЬ" - C++
Задание: Создать однонаправленную очередь с числами в диапазоне от –50 до +50. После создания очереди выполнить индивидуальное...

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include <iostream> #include <iomanip>// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.09.2009, 05:14 #2
элементы добавляются только в конец, а читаются только с начала
насчёт удаления не знаю, вообще, прочитанные должны удаляться

есть операция взятия адреса &
и операция получения объекта по адресу *
если в объекте данные представляют из себя адрес, можно дальше проходить **

C
1
    int n;
так как n - объект, то она имеет адрес, его можно узнать, выполнив операцию & с n

C
1
    printf("%p" "\n", &n);
n - имя объекта, поэтому, даже потеряв имя, можно обращаться к объекту и дальше, через его адрес
при динамическом выделении памяти, имени у выделенного блока вообще нет

операцию & можно перепутать с & в C++, которая имеет ещё одно назначение для работы с переменными, кроме взятия адреса (создаёт алиас для имени переменной, то есть как бы у одного объекта появляются два, три и тд имени)

это для С++ пример, как выглядят объявления ссылок

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
 
#include <iostream>
 
using namespace std;
 
int main(void)
{
    int n = 5;
    int &q1 = n;
    int &q2 = q1;
    int &q3 = q2;
    
    cout << q1
         << q2
         << q3
         << endl;
    
    n = 1;
    
    cout << q1
         << q2
         << q3
         << endl;
        
    return 0;
}


вывод

Код
[guest@station tmp]$ ./test
555
111
[guest@station tmp]$
0
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
22.09.2009, 06:54 #3
Цитата Сообщение от NAG Посмотреть сообщение
Вопрос №1:
Что такое "список типа очередь"? // нужно сформировать массив
Где-то слишал, что это массив из элементов, предидущий елемент котрого включает в себя адрес следующего // думаю, что создать масив записей, с двумя полями "число" и "адрес"
Если мое предположение правильное, то
Вопрос №2:
как работать с адресами, определять и.т.д. С помощью указателей? Коль да, то КАК?
Есть 2 варианта организации очереди.
1й - Статический массив, максимального размера nMax
Элементами класса являются:
собственно массив[nMax],
число nCur(0).//текущее количество элементов в очереди
Методы класса:
положить элемент в очередь: если nCur<nMax то добавить.
взять элемент из очереди: функция возвращает первый положенный элемент, и удаляет его из очереди.
Для статического массива придется делать сдвиги массива, после каждого удаления.

2й - Динамическая очередь
Элементом класса являются:
указатель на начало очереди( можно так же добавить указатель на конец очереди),
собственно класс "элемент очереди", поля этого класса - указатель на следующий эл.(иногда и на предыдущий), и собтвенно само значени.(напр. int a).
Методы класса:
положить элемент в очередь: доходим до последнего эл. выделяем место под еще 1 элемент, делаем связку адресов, задаем значение элемента.
взять элемент из очереди: функция возвращает первый положенный элемент, и удаляет его из очереди.//тут аккуратней с адресами


Ну вот и все %)
Динамическая очередь примерно выглядит так:

C++
1
2
3
4
5
6
7
8
9
class el_o4{
       el_o4 *next;
       int el;
}
 
class o4{
        el_o4 *beg = NULL;
//ну и методы
}
0
NAG
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
22.09.2009, 10:35  [ТС] #4
Цитата Сообщение от R0mm Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
class el_o4{  
       el_o4 *next;
       int el;
}
 
class o4{
        el_o4 *beg = NULL;
 
}
[/SPOILER]
C
1
el_o4 *next;
это адрес следующего елемента?
C
1
 int el;
это сам елемент?
а что такое
C
1
el_o4 *beg = NULL;
??
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.09.2009, 12:14 #5
Цитата Сообщение от R0mm Посмотреть сообщение
Для статического массива придется делать сдвиги массива, после каждого удаления.
ни в коем разе! имеется два указателя: на хвост и на нос. начало и размер буфера тоже известны. этого достаточно.
0
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
22.09.2009, 15:10 #6
Пример дэка
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
struct Dec
{
 int el;
 Dec *next;
};
 
struct BE
{
 Dec *beg;
 Dec *end;
};
 
 
void AddR(BE *pbe,int ii)
{
 void in(BE*,int);
 void erin();
 if (initbool)
 {
  if (pbe->beg == NULL)
  {
   in(pbe,ii);
  }
  else
  {
   pbe->end->next = new Dec;
   pbe->end = pbe->end->next;
   pbe->end->el = ii;
   pbe->end->next = NULL;
  }
  del = 1;
  printf("Addition on the right................................. [OK]");
 }
 else erin();
};
 
void AddL(BE *pbe, int ii)
{
 void in(BE*,int);
 void erin();
 if (initbool)
 {
  if (pbe->beg == NULL)
  {
   in(pbe,ii);
  }
  else
  {
   Dec *p = new Dec;
   p->next = pbe->beg;
   pbe->beg = p;
   pbe->beg->el = ii;
  }
  del = 1;
  printf("Addition on the left.................................. [OK]");
 }
 else erin();
};
 
void in(BE *pbe, int ii)
{
 pbe->beg = new Dec;
 pbe->end = pbe->beg;
 pbe->beg->next = NULL;
 pbe->beg->el = ii;
};
 
 
int *DelR(BE *pbe)
{
 void erdel();
 void erin();
 int n;
 Dec *p;
 if (initbool)
  if (del)
  {
   if (pbe->beg == pbe->end)
   {
    p = pbe->beg;
    pbe->beg = NULL;
    pbe->end = NULL;
    del = 0;
   }
   else
   {
    p = pbe->beg;
    while (p->next!=pbe->end)
    {
     p = p->next;
    }
    pbe->end = p;
    pbe->end->next = NULL;
    p = p->next;
   }
   n=p->el;
   delete p;
   printf("Delete on the left.................................... [OK]");
   return &n;
  }
  else {erdel(); return NULL;}
  else {erin(); return NULL;}
};
 
int *DelL(BE *pbe)
{
 void erin();
 void erdel();
 Dec *p;
 int n;
 if (initbool)
 if (del)
 {
  if (pbe->beg == pbe->end)
  {
   p = pbe->beg;
   pbe->beg = NULL;
   pbe->end = NULL;
   del = 0;
  }
  else
  {
   p = pbe->beg;
   pbe->beg = pbe->beg->next;
  }
  n=p->el;
  delete p;
  printf("Delete on the right................................... [OK]");
  return &n;
 }
 else {erdel(); return NULL;}
 else {erin(); return NULL;}
};
 
void DelAll(BE *pbe)
{
 Dec *p;
 
 while(pbe->beg!=pbe->end)
 {
  p = pbe->beg;
  while(p->next!=pbe->end)
  {
   p = p->next;
  }
  pbe->end = p;
  delete p;
 }
 del = 0;
 printf("Delete All............................................ [OK]\n");
};

писал давно, используя структуры, но думаю суть поймешь.
Дэк - это список, добавлять, и удалять можно с любой стороны.
0
NAG
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
22.09.2009, 21:07  [ТС] #7
в общем программа понятная..с функциями разобрался, но вопросик, что за функция
C++
1
void in(BE *pbe, int ii)
я пока только Си учил, и некоторые елементи Си++ мне не понятни. опиши что эта функцыя делает!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2009, 21:07
Привет! Вот еще темы с ответами:

Значение типа "void" нельзя использовать для инициализации сущности типа "int" - C++
Не понимаю, почему компилятор считает, что s.pop() это значение типа &quot;void&quot;.. он же вернет этот удаляемый элемент? Как исправить? void...

Ошибка аргумент типа "char" несовместим с параметром типа "LPCSTR" - C++
char result; result=printf(&quot;%d %d&quot;, &quot;test.php?id=&quot;,id); HINTERNET hHttpRequest = HttpOpenRequest( hHttpSession, &quot;GET&quot;, result,...

Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" - C++
значение типа &quot;char *&quot; нельзя присвоить сущности типа &quot;LPWSTR&quot; void AddColToListView(char *st, int sub, int size) { ...

Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" - C++
как исправить эту ошибку значение типа &quot;char *&quot; нельзя присвоить сущности типа &quot;LPWSTR&quot;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.09.2009, 21:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru