Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
1

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

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

Author24 — интернет-сервис помощи студентам
Вопрос №1:
Что такое "список типа очередь"? // нужно сформировать массив
Где-то слишал, что это массив из элементов, предидущий елемент котрого включает в себя адрес следующего // думаю, что создать масив записей, с двумя полями "число" и "адрес"
Если мое предположение правильное, то
Вопрос №2:
как работать с адресами, определять и.т.д. С помощью указателей? Коль да, то КАК?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2009, 02:06
Ответы с готовыми решениями:

Выбрать все простые числа из списка и поместить их в список типа очередь
end не однозначный символ, как исправить то народ? задание: Создать двусвязный список целых...

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

3 класса: список, стек(как список), очередь(как список)
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление,...

Работа со списком типа очередь
Здравствуйте. Нужно создать числовой список типа очередь из 5 объектов. Распечатать его. Далее...

6
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
Псевдо программист
192 / 113 / 37
Регистрация: 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
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
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.09.2009, 12:14 5
Цитата Сообщение от R0mm Посмотреть сообщение
Для статического массива придется делать сдвиги массива, после каждого удаления.
ни в коем разе! имеется два указателя: на хвост и на нос. начало и размер буфера тоже известны. этого достаточно.
0
Псевдо программист
192 / 113 / 37
Регистрация: 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
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
22.09.2009, 21:07  [ТС] 7
в общем программа понятная..с функциями разобрался, но вопросик, что за функция
C++
1
void in(BE *pbe, int ii)
я пока только Си учил, и некоторые елементи Си++ мне не понятни. опиши что эта функцыя делает!
0
22.09.2009, 21:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2009, 21:07
Помогаю со студенческими работами здесь

Создать класс типа - циклическая очередь
Без понятия как это сделать! Помогите пожалуйста! Создать класс типа - циклическая очередь....

Очередь список
Здравствуйте, как можно классы фигур загнать в список, а потом вывести queue &lt;Figure*,list&lt;int&gt;&gt;...

Сортировка слиянием односвязного списка типа очередь
Добрый день уважаемые! Возникла проблема реализации сортировки слиянием односвязного списка, с...

Односвязный список типа «очередь»
Здравстуйте у меня вот такая задача: Организовать работу с односвязым списком типа «очередь»....

Список типа очередь; исправить ошибку
Задание полностью. Создается текстовый файл из слов разной длины. Прочитать из файла слова в...

Массив указателей на список типа очередь - Освобождение памяти
Я выделял память так m=(SP*)malloc(MAX*sizeof(SP)); , т.е. сделал массив указателей на список...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru