0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 13
1

Кольцевые списки

03.06.2012, 20:34. Показов 1488. Ответов 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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
 
using namespace std;
 
struct list  // список
{
 int   x;   // число в элементе списка
 list* next;  // указатель на следущий элемент списка
};
 
struct mixlist  // в целом вся структура
{   
 list* one;  // первый список
 list* two;  // второй список
 list* three; // третий список
};
 
void add(list* &t, int k)  // добавление в список числа
{
 if (t==NULL)  // если список пуст
 {
 t=new list;  // выделяем память под новый элемент
 t->x=k;    // записываем число
 t->next=NULL;  // указатель на следующий пуст, так как он последний в списке
 }
 else  // если список не пуст
 { 
 list* tmp; 
 tmp=t;
 while (tmp->next!=NULL) // достигаем конца списка
 tmp=tmp->next;
 tmp->next=new list; // выделяем память под новый элемент
 tmp->next->next=NULL;  // указатель на следующий пуст, так как он последний в списке
 tmp->next->x=k;  // записываем число
 }
}
 
void add(mixlist* &s, int k) // добавление числа в структуру
{
 if (k%2==0)   // если число делится на 2 
 add(s->one,k);  // то добавляем в первый список
 if (k%3==0)  // если число делится на 3
 add(s->two,k);  // то добавляем во второй список
 if (k%2!=0 && k%3!=0)  // если число не делится ни на 2, ни на 3
 add(s->three,k);  // то добавляем в третий список
}
 
void fill(mixlist* &s)  // заполнение структуруры числами с консоли пока 0 не введено
{
 int k=-1;
 
 cout<<"для окончания ввода, введите 0\n\n";
 
 while (k!=0)
 {
 cout<<"введите целое число: ";
 cin>>k;
 if (k!=0)
 add(s,k);  // добавляем (вызов фунции) если не 0
 }
}
 
 
void show(mixlist* s)  // вывод на экран трех списков
{
 list* tmp;
 
 tmp=s->one; // во временную переменную адрес начала первого списка
 
 cout<<"Список №1: ";
 
 if (tmp!=NULL) // если не пуст этот список
 {
 cout<<tmp->x<<" "; // вывод элемента на консоль
 while (tmp->next!=NULL) // и далее пока есть следующий элемент
 {
 tmp=tmp->next;  // переходим к следующему
 cout<<tmp->x<<" ";  // и выводим его число на консоль
 }                       // аналогично для еще двух списков
 }
 else cout<<"список пуст";
 cout<<endl;
 
 tmp=s->two;   
 
 cout<<"Список №2: ";
 
 if (tmp!=NULL)
 {
 cout<<tmp->x<<" ";
 while (tmp->next!=NULL)
 {
 tmp=tmp->next;
 cout<<tmp->x<<" ";
 }
 }
 else cout<<"список пуст";
 cout<<endl;
 
 
 tmp=s->three;
 
 cout<<"Список №3: ";
 
 if (tmp!=NULL)
 {
 cout<<tmp->x<<" ";
 while (tmp->next!=NULL)
 {
 tmp=tmp->next;
 cout<<tmp->x<<" ";
 }
 }
 else cout<<"список пуст";
 cout<<endl;
 
}
 
void del(list* t)  // удаление списка
{
 if (t!=NULL)
 {
 list* tmp;
 
 while (t->next!=NULL)
 {
 tmp=t;   // копию в tmp
 t=t->next;  // переход к следующему элементу
 delete tmp;  // удаляем через копию предыдущий элемент
 }
 
 delete t;
 }
}
 
void del(mixlist* s)  // удаление трех списков структуры 
{
 del(s->one);
 del(s->two);
 del(s->three);
}
 
 
void main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 char c;
 
 cout<<"\n\nПрограмма сортирует список введенный пользователем в 3 других.\n№1 заполняется четными числами\n№2 заполняется кратными трем\n№3 заполняется оставшимися числами\n";
 
 mixlist* s;  // указатель на структуру
 s=new mixlist;  // выделяем память под нее
 
 s->one=NULL;  // пока списки все пустые
 s->two=NULL;
 s->three=NULL;
 
 fill(s);  // заполняем
 cout<<"\n";
 show(s);   // показываем на консоль
 del(s);   // удаляем списки в ней
 delete s;  // удаляем ее саму
 getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2012, 20:34
Ответы с готовыми решениями:

Кольцевые однонапрвленые списки
Привет, нужно написать програму, которая в кольцевом однонаправленом списке заменит все числа...

Кольцевые списки на базе двунаправленных списков
Всем привет! Помогите решить задачу: Пусть L обозначает кольцевой двунаправленный список с...

Электронные станции: радиальные, кольцевые и смешанные виды связей между ними
Нужно написать начало проги, помогите пожалуйста! Существует 15 станции, и 60 вариантов в каждом...

Списки, как склеить списки между собой?
Ребят, привет всем, есть код, в классе которого описаны несколько методов: добавление элемента в...

2
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 21:57 2
Цитата Сообщение от миклух Посмотреть сообщение
перепишите пожалуйста...
Если ты это сделал сам то проблем с реализацией кольцевого списка у тебя не должно быть. Если не знаешь что это - вперёд на википедию, ничего особо сложного после обычного односвязного списка ты там не должен найти.
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 13
04.06.2012, 05:19  [ТС] 3
Цитата Сообщение от Gepar Посмотреть сообщение
Если ты это сделал сам то проблем с реализацией кольцевого списка у тебя не должно быть. Если не знаешь что это - вперёд на википедию, ничего особо сложного после обычного односвязного списка ты там не должен найти.
я знаю как это должно выглядеть. в конце первого списка оказатель на следующий, и так далее, с помощью которого осуществляется доступ. но чёрт возьми, у меня не получается переделать
0
04.06.2012, 05:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2012, 05:19
Помогаю со студенческими работами здесь

Кольцевые списки
Зачем нужны кольцевые односвязные и двусвязные списки? Когда они могут понадобиться? Ведь, если...

Кольцевые списки
Здравствуйте, как реализовать удаление в кольцевом списке ? Читал, что можно сделать так, чтобы при...

Однонаправленные кольцевые списки
Помогите пожалуйста с кольцевыми списками!!! Нужно написать процедуру которая создает...

Двунаправленные кольцевые списки
Здравствуйте, уважаемые форумчане! Нужна помощь в доработке Двунаправленного кольцевого списка ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru