Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
miss-julia
2 / 2 / 2
Регистрация: 26.10.2014
Сообщений: 44
#1

Нахождение и изменение элемента двунаправленного кольцевого списка - C++

13.12.2014, 19:20. Просмотров 349. Ответов 7
Метки нет (Все метки)

помогите дополнить код,что бы можно было найти элемент введенный с клавиатуры и заменить его другим элементом( тоже введенным с клавиатуры)...
http://www.cyberforum.ru/cpp-beginners/thread1908564.html
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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    // объявление структуры элемента списка
//  и указателей на требуемые элементы
struct el { struct el* pred;
    int ELEM;
    struct el* posl;
}
    EL1,*pTEK,*pPRED,*temp, *pSTART1,*pEND1,*pSTART2,*pEND2;
    int i,z,flag=0;
    
// бесконечный цикл для ввода элементов первого списка
// так как количество элементов неизвестно
    for(;;)
    {
    cout<<"\nввести элемент?";cin>>z;
    if (z<1) break;
    pTEK=(struct el*)(malloc(sizeof(EL1))); //выделенная память                         //заносится в указатель
                        //на текущий элемент
    cout<<" \nэлемент=";cin>>pTEK->ELEM; //первоначальное
                                                                               //опреде-
                pTEK->pred=0;  //ление полей элемента
                pTEK->posl=0;  //   списка
//при создании первого элемента сохраняются соответствующие адреса
    if(flag==0){pSTART1=pTEK;pPRED=pTEK;
            pEND1=pTEK;flag=1; continue;}
    
    pPRED->posl=pTEK;  // заполнение полей
    pTEK->pred=pPRED;  // элементов списка
    pEND1=pPRED=pTEK;   // изменение указателей на конец списка // и предыдущий элемент
    pSTART1->pred=pEND1;
    pEND1->posl=pSTART1;
    }
    
// вывод на экран первого списка
    pTEK=pSTART1;
    do
    {cout<<"\n "<<pTEK->pred<<"  "<<pTEK->ELEM<<"  "<<pTEK->posl;
    pTEK=pTEK->posl;}
    while(pTEK!=pSTART1);
    
    int ch,d;
    cout<<"\nВвести число для поиска  ";
    cin>>ch;
 
 
 
 
 
 
 
 
// поиск искомого числа и изменение его
 
 
 
 
 
 
 
 
 
// вывод на экран первого списка
    cout<<"\n--------------------------";
        pTEK=pSTART1;
    
    do
    {cout<<"\n "<<pTEK->pred<<"  "<<pTEK->ELEM<<"  "<<pTEK->posl;
    pTEK=pTEK->posl;}
     while(pTEK!=pSTART1);
 
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2014, 19:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нахождение и изменение элемента двунаправленного кольцевого списка (C++):

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct...

Нахождение максимального элемента списка
Есть код: // ConsoleApplication1.cpp : Defines the entry point for the console...

Сортировка слиянием кольцевого списка
Есть класс двусвязного кольцевого списка и итератор к нему-шаблоны. не могу...

Шаблон однонаправленного кольцевого списка
Доброго времени суток. Мне необходимо написать шаблон однонаправленного...

Реализация кольцевого списка на СТЛ
Добрый день! Появилось несколько вопросов в ходе выполнения задания. Само...

7
olgashat
88 / 71 / 81
Регистрация: 07.12.2014
Сообщений: 303
13.12.2014, 19:43 #2
C++
1
2
3
4
5
6
7
8
int zamena,find;
cin>>find>>zamena; 
pTEK=pSTART1;
    do
    {if (pTEK->ELEM==find) pTEK->ELEM=zamena;
 
    pTEK=pTEK->posl;}
    while(pTEK!=pSTART1);
1
miss-julia
2 / 2 / 2
Регистрация: 26.10.2014
Сообщений: 44
14.12.2014, 15:07  [ТС] #3
olgashat, В прицепе замена происходит, а адреса не должны поменяться? а то у меня и в начале и после замены адреса одинаковые?
0
olgashat
88 / 71 / 81
Регистрация: 07.12.2014
Сообщений: 303
14.12.2014, 15:34 #4
Лучший ответ Сообщение было отмечено miss-julia как решение

Решение

нет, я меняла только информационные части

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int zamena,find;
el *new_el=new el;
new_el->ELEM=zamena;
 
cin>>find>>zamena; 
pTEK=pSTART1;
    do
    {
if (pTEK->ELEM==find) 
{
new_el->pred=pTEK->pred;
new_el->posl=pTEK->posl;
pTEK->pred->posl= new_el;
new_el->posl->pred= new_el;
delete pTEK;
}
    pTEK=pTEK->posl;}
    while(pTEK!=pSTART1);
1
miss-julia
2 / 2 / 2
Регистрация: 26.10.2014
Сообщений: 44
15.12.2014, 21:14  [ТС] #5
olgashat, пишет "необработанное исключение и нарушение прав доступа при записи".в итоге не меняет(

Добавлено через 2 часа 18 минут
olgashat, не поможете исправиться проблемку?
0
olgashat
88 / 71 / 81
Регистрация: 07.12.2014
Сообщений: 303
15.12.2014, 21:35 #6
miss-julia,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int zamena, find;
    cout << "\nFor searching ";
    cin >> find;
    cin >>  zamena;
    el *new_el = new el;
    new_el->ELEM = zamena;
 
    pTEK = pSTART1;
    while (pTEK->ELEM != find)pTEK = pTEK->posl;
    
            new_el->pred = pTEK->pred;
            new_el->posl = pTEK->posl;
            pTEK->pred->posl = new_el;
            new_el->posl->pred = new_el;
            delete pTEK;
1
miss-julia
2 / 2 / 2
Регистрация: 26.10.2014
Сообщений: 44
17.12.2014, 20:19  [ТС] #7
olgashat,
Цитата Сообщение от olgashat Посмотреть сообщение
el *new_el = new el;
new, как я понимаю выделяет память как и malloc, только каким то другим способом? каким? и обязательно ли освобождать потом эту память?

Добавлено через 4 минуты
olgashat, и можно ли заменить new ,чем то не связанным с классами?или new и без классов хорошо работает?

Добавлено через 20 минут
и получается что delete освобождает память из под pTEK, а не из нового элемента, надо ли очищать память delete new_el в конце программы?
0
olgashat
88 / 71 / 81
Регистрация: 07.12.2014
Сообщений: 303
17.12.2014, 20:43 #8
miss-julia, память захватывается для нового элемента, а высвобождается в момент очищения чтека
1
17.12.2014, 20:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2014, 20:43
Привет! Вот еще темы с решениями:

Сортировка кольцевого двусвязного списка (пузырьковая)
Доброго дня! Помогите пожалуйста разобраться с сортировкой кольцевого...

Консольный интерфейс для кольцевого односвязного списка
http://ubuntuone.com/6wKtCh5iViDl0xyPSRc3LC вот тут все файлы проги.. 7.cpp...

Шаблон двунаправленного списка
Добрый день! Пишу программу &quot;библиотека&quot;, которая включает в себя типы данных...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема,...


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

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

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