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

Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 19:43     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #1
Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
на с++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2010, 19:43     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
Посмотрите здесь:

Напишите функцию, упорядочивающую элементы массива по сумме первого и второго поля, которая записывается в третье поле, в порядке возрастания C++
C++ Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка.
Частота_Х, которая определяет, с какой частотой встречается элемент Х входного списка L C++
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2 C++
Динамические структуры данных. Сформировать динамический список, описать функцию, которая удаляет из списка за каждым вхождением элемента Е C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 20:35     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #2
Если речь идет о динамических структурах данных то мой ответ правильный.

Могу только подсказать, писать долго, к тому же у тебя могут возникнуть всякие - вопросы,
на которые мне некогда отвечать.
Напишу только одну твою функцию


Подсказка:
Функция должна выглядеть так:
int equeal(Node *pbeg1 , Node *pbeg2);
Первый параметр, указатель на начало одного списка.
Второй параметр, указатель на начало другого списка.

//Реализация функции--------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int equeal(Node *pbeg1 , Node *pbeg2){
//По не доходим до концов списков
while((pbeg1!=NULL)||(pbeg2!=NULL)){
 
if(pbeg1->data!=pbeg2->data)return 0; //какой- то элемент списка не равен другому элементу списка
 
//К следующим элементам списков
pbeg1=pbeg1->next;
pbeg2=pbeg2->next;
 
}
return 1;            //все элементы списков равны между собой
 
 
}
Добавлено через 1 минуту
Желательно одинаковые размеры списков.
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 20:51  [ТС]     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #3
если можно то полностью текс проги можна !
спс зарание!
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:17     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #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
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
174
175
176
177
178
179
180
181
#include <iostream.h>
#include <stdlib.h>
 
//Возвращаемые значения
//----------------------------------------------------------
//Для функции: long Create(Node **pbeg, Node **pend, DATA d)
#define OK_CREATE 0x000       //список создан
#define LIST_IS   0x100       //список уже существует, его повторное создание невозможно
 
//Для функции: long add(Node  **pend, DATA d)
#define OK_ADD       0x300          //добавили в конец списка
#define LIST_IS_NOT  0x003          //список пуст создайте его заново
//---------------------------------------------------------------------------
 
//описываем узел
struct Node {
int dan;
Node *prev;
Node *next;
};
 
//Основные функции по работе со списком----------------------------------------------------------------------------------------
long Create (Node **pbeg, Node **pend, int d);     //создание списка
long add    (Node  **pbeg, Node **pend ,int d);    //добавление в конец
Node * Find (Node*pbeg, int key);                  //поиск узла по ключу
bool deleteU(Node **pbeg, Node **pend ,  int key);           //удаление по ключу
void Print(Node *pbeg);                                      //показ списка сначала
int equeal(Node *pbeg1 , Node *pbeg2);             //Поэлементное сравнение списков
//-----------------------------------------------------------------------------------------------------------------------------
 
void main(){
//Указатели для операций-------------------------------------------------------------------------------------------------------
Node *pbeg1 = NULL;
Node *pend1 = NULL;
//-----------------
Node *pbeg2 = NULL;
Node *pend2 = NULL;
//---------------------------------------------
Create(&pbeg1,&pend1,-30);   //создаём список: 1
int mas1[5]={-8,-4,5,7,3};
for(int i=0;i<5;i++)add(&pbeg1,&pend1,mas1[i]);
//---------------------------------------------
Create(&pbeg2,&pend2,-30);   //создаём список: 2
int mas2[5]={-8,-4,5,7,3};
for(i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);
//---------------------------------------------
//СРавниваем списки
int mes = equeal(pbeg1,pbeg2);
if(mes==1)cout<<"Списки равны\n";
else cout<<"списки не равны\n";
 
 
//Освобождаем память из под списков.
//Из под первого
while(pbeg1){
Node*tmp=pbeg1;
pbeg1=pbeg1->next;
delete tmp;
}
//Из под второго
while(pbeg2){
Node*tmp=pbeg2;
pbeg2=pbeg2->next;
delete tmp;
}
 
return;
}
 
//---------------------------------------------------------------------------------------------------------------------
 
 
 
//создание списка-----------------------------
long Create (Node **pbeg, Node **pend, int d){
//Безопасное создание списка, если список пуст создаём его
if((*pbeg)==NULL||(*pend)==NULL) {
 
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла нет
pv->prev = NULL;      //предыдущего узла нет
(*pbeg)=pv;           //это узел начальный
(*pend)=(*pbeg);      //начало-конец списка
return OK_CREATE;     //создали список
}
//иначе
else return LIST_IS;  //список существет создавать его не надо
 
 
}
 
//добавление в конец очереди
long add(Node  **pbeg, Node **pend, int d){
if((*pbeg)==NULL||(*pend)==NULL)return LIST_IS_NOT;
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла ещё нет
pv->prev =(*pend);    //связываемя с последним
(*pend)->next = pv;   //последний связывается с новым
(*pend)=pv;           //новый становится последним.
return  OK_ADD ;
 
 
}
 
 
 
//Поиск-----------------------------------
Node * Find (Node* pbeg, int key){
Node *pv=NULL;
while(pbeg){
    if(key==pbeg->dan){
    pv=pbeg;
    return pv;
    }
pbeg=pbeg->next;  //следующий
}
return NULL;      //Не найден(Когда список пустой поиск делать не стоит, или проверяйте после вызова на NULL)
}
 
 
//удалить узел
bool deleteU(Node **pbeg, Node **pend, int key){
if((*pbeg)==NULL||(*pend)==NULL)return false;
Node * temp = *pbeg;
//выполяем поиск по ключу
while(temp){
    //Если нашли
    if(key==temp->dan){
    
        //если удаляемый узел это конец
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
        //если удаляемый узел начало
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
        //иначе удаляем из середины
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        delete temp;  //удаляем узел 
        temp = NULL;  //в ноль на всякий
        return true;
    }
temp=temp->next; //следующий
}
 
return false;
}
 
 
//показать список на экран--------------------
void Print(Node *pbeg){
    
    while(pbeg){
        cout<<pbeg->dan<<'\n';
        pbeg=pbeg->next;
    }
}
 
 
 
//Поэлементное сравнение списков
int equeal(Node *pbeg1 , Node *pbeg2){
 
while((pbeg1!=NULL)||(pbeg2!=NULL)){
 
if(pbeg1->dan!=pbeg2->dan)return 0; 
pbeg1=pbeg1->next;
pbeg2=pbeg2->next;
}
return 1;          
 
 
}
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:28  [ТС]     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #5
ошибка в строке
for(i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);
ответ кампилятора
+ необъявленный ин-тор - i
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:50     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #6
//напиши так:
for(int i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);

Добавлено через 2 минуты
Всё зависит от компилятора:
Допустим Visual C++ компилирует,
А C++ из Visual Studio нет.
Это связано с областями видимости переменных счётчиков цикла.
Это недоговорённость между разработчиками компиляторов.
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:50  [ТС]     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #7
прога запускается и сразу исчезает!!!
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
14.01.2010, 21:52     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #8
FREEMEN, Во дела, да?
А getch(); уже не в моде? Или там system("pause");
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:53     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #9
У меня запускается я тут не причём.
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:56  [ТС]     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #10
поставил я system("pause");
и прога пишет только
для прод ........ ....... и т.д
а как она работает?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 22:00     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #11
Может вначале main(), scanf вызвать с какой-нибудь переменной
FREEMEN
 Аватар для FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 22:06  [ТС]     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #12
не понял?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 09:42     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
Еще ссылки по теме:

C++ Описать процедуру и функцию которая, удаляет из списка L за каждым вхождением элемента Е один элем если такой есть, и он отличен от Е
C++ Описать процедуру или функцию, которая находит max элемент не пустого списка L
C++ Списки. Как создать одновременно 2 списка? Как из второго списка поместить элементы в первый?

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

Или воспользуйтесь поиском по форуму:
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 09:42     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. #13
А что непонятного, если вызывается scanf передаётя управление на ввод значения,
когда передано управление на ввод программа не вылетает, у меня такое было.
А scanf лучше напиши перед выходом из main
Yandex
Объявления
15.01.2010, 09:42     Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
Ответ Создать тему
Опции темы

Текущее время: 00:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru