|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.03.2020, 14:01 | #1 |
Пользователь
Регистрация: 12.03.2020
Сообщений: 12
|
задача со списками,не могу понять что делаю не так в двунаправленном списке выводит не то что нужно
#include <iostream>
using namespace std; struct spisok { double data; spisok* next; }; struct kekw { int info; kekw* next; kekw* prev; }; kekw* first = 0; kekw* last = 0; spisok* make_list(int n) { spisok* beg; spisok* p, * r; beg = new(spisok); cout << "Голова\n"; cin >> beg->data; beg->next = 0; p = beg; for (int i = 0; i < n - 1; i++) { r = new(spisok); cout << "Введите элемент массива\n"; cin >> r->data; r->next = 0; p->next = r; p = r; } return beg; } void print_list(spisok* beg) { spisok* p = beg;//начало списка while (p != 0) { cout << p->data << "\t"; p = p->next;//переход к следующему элементу } } spisok* add_point(spisok* beg) { spisok* p = beg;//встали на первый элемент for (int i = 0; p != 0; i++) { if (p->data < 0) { spisok* New = new(spisok);//создали новый элемент New->data = 0; New->next = p->next; p->next = New; } p = p->next; } return beg; } void clear(spisok* beg) { spisok* p = beg;//начало списка spisok* r; while (p != 0) { r = p->next; delete p; p = r;//переход к следующему элементу } } kekw* make_point() //создание одного элемента { kekw* p = new(kekw); p->next = 0; p->prev = 0;//обнуляем указатели int s; cout << "Введите элемент списка:"; cin >> s; p->info = s;//выделение памяти return p; } kekw* make_list1(int k) //создание списка { kekw* p, * head; head = make_point();//создаем первый элемент for (int i = 1; i < k; i++) { p = make_point();//создаем один элемент //добавление элемента в начало списка p->next = head;//связываем р с первым элементом head->prev = p;//связываем первый элемент с p head = p;// p становится первым элементом списка } return head; } void del(kekw* head) { kekw* p = head; while (p != 0 && p->info % 2 != 0) p = p->next; if (p == NULL) return; kekw* prev = p->prev; kekw* next = p->next; if (prev != NULL) prev->next = next; if (next != NULL) next->prev = prev; delete p; } void print(kekw* head) { kekw* p = head;//начало списка while (p != 0) { cout << p->info << "\t"; p = p->next;//переход к следующему элементу } } void clear1(kekw* head) { kekw* p = head;//начало списка kekw* r; while (p != 0) { r = p->next; delete p; p = r;//переход к следующему элементу } } int main() { setlocale(LC_ALL, "rus"); int n, k, f; do { cout << "1.Односвязный список(после каждого элемента <0 добавить 0)\n"; cout << "2.Двусвязный список(удалить первый четный элемент в списке)\n"; cout << "3. Выход\n"; cin >> f; switch (f) { case 1: {cout << "Введите размер списка: "; cin >> n; spisok* beg = make_list(n); add_point(beg); print_list(beg); clear(beg); } cout << "\n\n"; break; case 2: {cout << "Введите размер списка: "; cin >> k; kekw* head = make_list1(k); del(head); print(head); clear1(head); } cout << "\n\n"; break; } } while (f != 3);//выход system("pause"); } |
24.03.2020, 14:02 | #2 |
Пользователь
Регистрация: 12.03.2020
Сообщений: 12
|
вот вывод
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление повторяющихся элементов в двунаправленном списке | Заяц90 | Общие вопросы C/C++ | 0 | 19.12.2018 18:39 |
Удаление элемента в двунаправленном списке из начала | Grai | Общие вопросы C/C++ | 17 | 03.07.2015 16:03 |
Процедура удаления в двунаправленном списке | mishammm | Помощь студентам | 1 | 04.05.2014 07:05 |
не могу понять,что нужно дописать | ТатьянаП | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 18.10.2010 15:43 |
IBExpert, не могу понять что делаю не так! в чём проблема.... | katia0017 | SQL, базы данных | 10 | 15.01.2010 18:33 |