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

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

Войти
Регистрация
Восстановить пароль
 
gerk0
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
#1

Односвязные списки (очередь) - C++

10.05.2013, 16:31. Просмотров 709. Ответов 4
Метки нет (Все метки)

Задание.Удалить с очереди все элементы, расположенные до минимального элемента очереди.

Пример создания контейнера "очередь" с использованием структур:
Определение структуры очереди:
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
struct tstk
{ 
int inf;
tstk *a; 
} sp;
Функция добавления элемента в очередь
void AddOch(toch **sp,toch **spk, int inf)
{
toch *spt=new toch;
spt->inf = inf;
spt->a = NULL;
if (*spk == NULL) 
*sp=*spk=spt;
else
{ 
(*spk)->a = spt; 
*spk = spt; 
}
return;
}
Начало использования очереди:
sp=spk=NULL;
AddOch(&sp, &spk, информация);
Функция считывания элемента с удалением:
toch *ReadOchD(toch *sp, int &inf)
{
if (sp == NULL) 
return NULL;
inf= sp->inf;
toch *spt = sp;
sp = sp->a;
delete spt;
return sp;
}
Функция удаления элемента после поточного:
void DelOchAfter(toch *sp)
{
if (sp->a == NULL) 
return;
toch *spt = sp->a;
sp->a = sp->a->a;
delete spt;
}Функция удаления всей очереди:
void DelOchAll(toch **sp, toch **spk)
{
toch *spt; int inf;
while(*sp != NULL)
{
spt = *sp;
inf= (*sp)->inf;
cout << inf << endl;
*sp = (*sp)->a;
delete spt;
}
*spk=NULL;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 16:31     Односвязные списки (очередь)
Посмотрите здесь:

Создать очередь вещественных значений, для реализации используя односвязные списки - C++
Создать очередь вещественных значений, для реализации используя односвязные списки. Реализовать операции добавления() и удаления() элемента...

односвязные списки - C++
Помогите пожалуста в проге нужно в методе класа List нужно вставить елементы с первого списка в второй после последнего вхождение...

Односвязные списки С++ - C++
Помогите пожалуйста с заданием: Необходимо создать список(из целых чисел) добавлением элемента в конец... Я написала программу,только...

Односвязные списки - C++
Вечер добрый) Сформировать список символов, оканчивающийся точкой. Заменить в списке символ “A” на символ “0”. Сама задача есть и...

Односвязные списки - C++
Вот такая задачка Дан текстовый файл. Группы символов, разделенные пробелами, будем называть словами. В файле оставить только по...

Односвязные списки - C++
Задача: добавить в список 1 узлы, содержащие слова в списке 2, не совпадающие со словами списка 1(линейный список 1 из слов хранится в...

Односвязные списки - C++
Всем доброго времени суток. Мне нужно реализовать вот эти операторы в односвязном списке: void gotoTail() void addToTail(Node* node) ...

Односвязные лнейные списки - C++
Доброго времени суток. Нужно решить задачу, а я в списках не шарю совсем(и скока не пытался разобраться-не получиилось) Вот задача ...

Односвязные линейные списки - C++
Здравствуйте! Помогите пожалуйста. Даны текстовый файл и строка s. Группы символов, разделенные пробелами, будем называть ...

Односвязные списки, стек - C++
Помогите пожалуйста, кто может:(. нужно только дописать удаление. вот само задание: удаление из линейного стека входной...

Линейные Односвязные Списки С++ - C++
Разработать и реализовать программу создания и обработки линейного односвязного списка с одним информационным полем, которое содержит целое...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.05.2013, 19:59     Односвязные списки (очередь) #2
gerk0, ох и код скажу я вам ... Писал по аналогии ... Функции представленные вами не трогал.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
struct toch
{
   int inf;
   toch* a;
};
 
void AddOch(toch** sp, toch** spk, int inf)
{
   toch* spt = new toch;
   spt->inf = inf;
   spt->a = NULL;
   if (*spk == NULL)
   {
      *sp = *spk = spt;
   }
   else
   {
      (*spk)->a = spt;
      *spk = spt;
   }
}
 
toch* ReadOchD(toch* sp, int& inf)
{
   if (sp == NULL)
   {
      return NULL;
   }
   inf = sp->inf;
   toch* spt = sp;
   sp = sp->a;
   delete spt;
   return sp;
}
 
void DelOchAfter(toch* sp)
{
   if (sp->a == NULL)
   {
      return;
   }
   toch* spt = sp->a;
   sp->a = sp->a->a;
   delete spt;
}
 
void DelOchBefore(toch** sp, toch* node)
{
   int inf;
   while (*sp != node)
   {
      *sp = ReadOchD(*sp, inf);
   }
}
 
void DelOchAll(toch** sp, toch** spk)
{
   toch* spt;
   int inf;
   while (*sp != NULL)
   {
      spt = *sp;
      inf = (*sp)->inf;
      cout << inf << endl;
      *sp = (*sp)->a;
      delete spt;
   }
   *spk = NULL;
}
 
toch* FindMin(toch* sp)
{
   toch* min = sp;
 
   for (; sp; sp = sp->a)
   {
      if (sp->inf < min->inf)
      {
         min = sp;
      }
   }
 
   return min;
}
 
void PrintOch(const toch* sp)
{
   for (; sp; sp = sp->a)
   {
      cout << sp->inf << " ";
   }
   cout << endl;
}
 
int main()
{
   srand(time(NULL));
 
   struct
   {
      toch* head;
      toch* tail;
   }  queue = {NULL, NULL};
 
   for (int i = 0; i < 10; ++i)
   {
      AddOch(&queue.head, &queue.tail, rand() % 100);
   }
 
   cout << "source: ";
   PrintOch(queue.head);
 
   toch* min = FindMin(queue.head);
 
   cout << "min = " << min->inf << endl;
 
   DelOchBefore(&queue.head, min);
 
   cout << "result: ";
   PrintOch(queue.head);
 
   // DelOchAll(&queue.head, &queue.tail);
 
   return 0;
}
Односвязные списки (очередь)
gerk0
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
10.05.2013, 20:41  [ТС]     Односвязные списки (очередь) #3
Спасибо большое за предоставленную помощь!
Да уж, что касается объема - не завидная картина
Если Вам не трудно, как бы Вы упростили на моём месте?
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.05.2013, 20:53     Односвязные списки (очередь) #4
Цитата Сообщение от gerk0 Посмотреть сообщение
Если Вам не трудно, как бы Вы упростили на моём месте?
Убрал не используемые функции: ReadOchD и DelOchAfter. А функцию DelOchAll упростил. Получилось бы примерно так:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
struct toch
{
   int inf;
   toch* a;
};
 
void AddOch(toch** sp, toch** spk, int inf)
{
   toch* spt = new toch;
   spt->inf = inf;
   spt->a = NULL;
   if (*spk == NULL)
   {
      *sp = *spk = spt;
   }
   else
   {
      (*spk)->a = spt;
      *spk = spt;
   }
}
 
void DelOchBefore(toch** sp, toch* node)
{
   toch* spt;
   while (*sp != node)
   {
      spt = *sp;
      *sp = (*sp)->a;
      delete spt;
   }
}
 
void DelOchAll(toch** sp, toch** spk)
{
   DelOchBefore(sp, NULL);
 
   *spk = NULL;
}
 
toch* FindMin(toch* sp)
{
   toch* min = sp;
 
   for (; sp; sp = sp->a)
   {
      if (sp->inf < min->inf)
      {
         min = sp;
      }
   }
 
   return min;
}
 
void PrintOch(const toch* sp)
{
   for (; sp; sp = sp->a)
   {
      cout << sp->inf << " ";
   }
   cout << endl;
}
 
int main()
{
   srand(time(NULL));
 
   struct
   {
      toch* head;
      toch* tail;
   }  queue = {NULL, NULL};
 
   for (int i = 0; i < 10; ++i)
   {
      AddOch(&queue.head, &queue.tail, rand() % 100);
   }
 
   cout << "source: ";
   PrintOch(queue.head);
 
   toch* min = FindMin(queue.head);
 
   cout << "min = " << min->inf << endl;
 
   DelOchBefore(&queue.head, min);
 
   cout << "result: ";
   PrintOch(queue.head);
 
   DelOchAll(&queue.head, &queue.tail);
 
   return 0;
}
gerk0
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
10.05.2013, 20:56  [ТС]     Односвязные списки (очередь) #5
И ещё раз благодарен, так код поинтересней выглядит
Yandex
Объявления
10.05.2013, 20:56     Односвязные списки (очередь)
Ответ Создать тему
Опции темы

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