Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 11
1

Очередь. Циклический список. Удалить указанный элемент и все предшествующие

19.06.2013, 23:54. Показов 1709. Ответов 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
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
 начиная от сюда ->
typedef struct node_t
{
   int value;
   struct node_t* next;
}  TNode;
 
typedef struct queue_t
{
   TNode* head;
   TNode* tail;
}  TQueue;
 
//-----------------------------------------------------------------------------
TQueue* Push(TQueue* list, int value)
{
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
 
   if (list->head && list->tail)
   {
      node->next = list->head;
      list->tail->next = node;
      list->tail = node;
   }
   else
   {
      node->next = node;
      list->head = list->tail = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
TQueue* Pop(TQueue* list)
{
   TNode* node = list->head;
 
   if (node)
   {
      if (list->head == list->tail)
      {
         list->head = list->tail = NULL;
      }
      else
      {
         list->head = node->next;
         list->tail->next = list->head;
      }
 
      free(node);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
TNode* Find(TQueue* list, int value)
{
   TNode* node = list->head;
 
   if (node)
   {
      while ((node != list->tail) && (node->value != value))
      {
         node = node->next;
      }
   }
 
   return (node && (node->value == value)) ? node : NULL;
}
//-----------------------------------------------------------------------------
TQueue* RemoveBefore(TQueue* list, int value)
{
   TNode* node = Find(list, value);
 
   if (node)
   {
      while (node != list->head)
      {
         Pop(list);
      }
      Pop(list);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Print(const TQueue* list)
{
   TNode* node = list->head;
 
   printf("[");
   if (node)
   {
      while (node != list->tail)
      {
         printf("%d, ", node->value);
         node = node->next;
      }
      printf("%d", node->value);
   }
   printf("]\n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   TQueue list = {NULL, NULL};
   size_t i;
 
   for (i = 0; i < 10; ++i)
   {
      Push(&list, i + 1);
   }
 
   Print(&list);
 
   RemoveBefore(&list, 5);
 
   Print(&list);
 
   system("pause");
 
   return EXIT_SUCCESS;
заканчивая тут
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2013, 23:54
Ответы с готовыми решениями:

Реализовать Очередь. Циклический список. Удалить указанный элемент и все предшествующие
Реализовать Очередь. Циклический список. Удалить указанный элемент и все предшествующие. Помогите...

Реализовать. Циклическую очередь. Удалить указанный элемент и все предшествующие
Прошу очень сильно Реализовать Циклическую очередь. Удалить указанный элемент и все предшествующие....

Сформировать циклический связанный список (очередь)
Сформировать циклический связанный список (очередь), содержащий последовательность целых чисел,...

Удалить элемент из «стека» и поместить его в «очередь» и «двусвязный список»
Удалить элемент из «стека» и поместить его в «очередь» и «двусвязный список». Результат проверить.

1
...
1800 / 1265 / 934
Регистрация: 12.02.2013
Сообщений: 2,058
20.06.2013, 04:19 2

Не по теме:

Ба-а-а... Да это мой код :)


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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <stdio.h>
#include <stdlib.h>
 
// Узел списка
typedef struct node_t
{
   int value;           // Хранимое значение
   struct node_t* next; // Указатель на следующий узел
}  TNode;
 
// Очередь
typedef struct queue_t
{
   TNode* head; // Указатель на вершину списка
   TNode* tail; // Указатель на конец списка
}  TQueue;
 
//-----------------------------------------------------------------------------
// Функция добавления элемента в список. В качестве аргументов получает
// саму очереди и элемент который следует добавить
TQueue* Push(TQueue* list, int value)
{
   // Создаём новый узел
   TNode* node = (TNode*) malloc(sizeof(TNode));
   // Задаём значение новому узлу
   node->value = value;
 
   // Если в списке есть уже элементы, то...
   if (list->head && list->tail)
   {
      // Новый элемент будет ссылаться на вершину списка (т.к. у нас кольцо)
      node->next = list->head;
      // А хвост будет ссылаться на новый элемент
      list->tail->next = node;
      // Теперь новый элемент становится хвостом
      list->tail = node;
   }
   // Если список пуст
   else
   {
      // Т.к. у нас кольцевой список, а элемент всего один, то
      // он ссылается сам на себя. И кроме этого является как
      // вершиной, так и хвостом
      //
      node->next = node;
      list->head = list->tail = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
// Функция удаления элемента из списка
TQueue* Pop(TQueue* list)
{
   // Вспомогательная переменная, в начале принимает значение вершины
   TNode* node = list->head;
 
   // Если список не пуст
   if (node)
   {
      // Если в списке всего один элемент
      if (list->head == list->tail)
      {
         list->head = list->tail = NULL;
      }
      else
      {
         // указатель на голову смещаем ниже на один узел
         list->head = node->next;
         // Хвост должен указывать на новый верхний узел
         list->tail->next = list->head;
      }
 
      // Удаляем отделённый узел
      free(node);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
// Поиск элемента в списке. В случае нахождения указанного элемента возвращает
// указатель на найденный элемент, иначе возвращает NULL
TNode* Find(TQueue* list, int value)
{
   // Вспомогательная переменная, в начале принимает значение вершины
   TNode* node = list->head;
 
   // Если список не пуст
   if (node)
   {
      // Пока узел не равен хвосту и пока значение его не примет value
      // перебираем узлы
      while ((node != list->tail) && (node->value != value))
      {
         node = node->next;
      }
   }
 
   // Если список был не пуст и был найден требуемый элемент, то
   // возвращаем непосредственно ссылку на него, иначе возвращаем NULL
   return (node && (node->value == value)) ? node : NULL;
}
//-----------------------------------------------------------------------------
// Удаление всех элементов/узлов которые расположены перед искомым.
// Также удаляется и сам элемент
TQueue* RemoveBefore(TQueue* list, int value)
{
   // Пытаемся найти требуемый элемент
   TNode* node = Find(list, value);
 
   // В случае нахождения такового
   if (node)
   {
      // Удаляем все элементы до найденного
      while (node != list->head)
      {
         Pop(list);
      }
      // Удаляем найденный элемент
      Pop(list);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
// Вывод на экран всего списка
void Print(const TQueue* list)
{
   // Вспомогательная переменная, в начале принимает значение вершины
   TNode* node = list->head;
 
   printf("[");
   // Если список не пуст
   if (node)
   {
      // Перебираем все узлы пока не дойдём до хвоста
      while (node != list->tail)
      {
         printf("%d, ", node->value);
         node = node->next;
      }
      // Выводим хвостовой элемент
      printf("%d", node->value);
   }
   printf("]\n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   // Инициализируем список
   TQueue list = {NULL, NULL};
   size_t i;
 
   // Добавляем в список числа от 1 до 10
   for (i = 0; i < 10; ++i)
   {
      Push(&list, i + 1);
   }
 
   // Выводим на экран получившийся список
   Print(&list);
 
   // Удаляем все элемент до цифры 5 включительно
   RemoveBefore(&list, 5);
 
   // Выводим результат
   Print(&list);
 
   system("pause");
 
   return EXIT_SUCCESS;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2013, 04:19

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди
Нужно создать очередь. Добавить элемент в очередь. Удалить элемент из очереди. Вот моё...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива
Найти произведение отрицательных элементов массива, следующих после первого положительного...

Удалить из последовательности все запятые, предшествующие первой точке
Дано натуральное число n, символы s1,..., sn, среди которых есть хотя бы одна точка. Превратить...

Удалить указанный элемент из числового массива...
Написать программу, содержащую процедуру, которая удаляет указанный элемент из числового массива....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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