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

Цикл по односвязному списку - C++

Восстановить пароль Регистрация
 
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
07.09.2014, 13:29     Цикл по односвязному списку #1
добрый день, можете подсказать как можно сделать прохождение до конца списка, вообщем задача у меня такая, есть односвязный список с хранящимися в днем масивами, там только 1 или 0 и мне нужно удалить один из элемент и другие изменить так если они были связаны, вообще по идее там получается как бы матрица перехода для отрезков с активными связями
для треугольника будет вот так например
Название: для форума.png
Просмотров: 51

Размер: 2.7 Кб
ну я в элементах храню масивы
1-ый 0 1 1
2-ой 1 0 1
3-ий 1 1 0
и вот если удалить второй
то должно остатся
1-ый 0 1
2-ой 1 0
а у меня получается остается
0 1 1
1 1 0
то что нужно не коректируется
вот мой код, оно вроде коректирует, но по новой в список не заносит, и почему-то до последнего элемента в списке не доходит, я пытался крутил вертел что бы исправить не получается, подскажите пожалуйста как можно, ну для начала что бы доходило до конца списка
код
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
void CStack::DelVal(int k,int &n)
{   
    int e;
    int *vremMas;
    vremMas=new int [n];
    Elem *pCur=pFirst;
    for(Elem**next=&pFirst;*next;next=&(*next)->pNext)
    {       
        if((*next)->id==k)//найден элемент который надо удалить
        {               
            for(int i=0;i<n;i++)
            {
                vremMas[i]=pCur->mas[i];//времено сохраняем массив который мы удалим
                cout<<vremMas[i];
            }
            cout<<endl;
            int h;
            Elem*to_delete=*next;
            h=(*next)->id;  //запоминаем айди которое потом удалим и сместим текущий список
            cout<<h<<endl;
            for(int g=0;g<n;g++)
            {
                if(vremMas[g]==1)//если в массиве 1
                {
                    cout<<"vxod"<<g+1<<endl;
                    Elem *pVrem=pFirst; 
                    for(Elem *pVrem=pFirst;pVrem->pNext!=NULL;pVrem=pVrem->pNext)
                    {
                        int j=0;
                        if(pVrem->id==g+1)//найдет элемент списка в котором нужно изменить массив
                        {
                            cout<<pVrem->id<<endl;
                            for(int y=0;y<n;y++)
                            {                               
                                if(y+1!=h)
                                {
                                    pVrem->mas[j]=pVrem->mas[y];//тут по идее должні вносится новые данные в список
                                    cout<<pVrem->mas[j];
                                    j++;
                                }
                            }
                            cout<<endl;
                        }                       
                        cout<<"id: "<<pVrem->id<<endl;
                    }
                }
            }           
            *next=to_delete->pNext;//элемент который будетсмещен
            (*next)->id=h;
            delete to_delete;   //удаление нужного элемента списка              
            return;
        }
        pCur=pCur->pNext;
    }   
}
я так понимаю проблема в массиве
C++
1
for(Elem *pVrem=pFirst;pVrem->pNext!=NULL;pVrem=pVrem->pNext)
но почему-то в голову не приходит как исправить, в разных местах cout вставлял что бы понять где и сколько раз заходит в цикл и тд, и заметил что до посленего не доходит
ну всмысле тут
C++
1
2
3
pVrem->mas[j]=pVrem->mas[y];//тут по идее должні вносится новые данные в список
                                    cout<<pVrem->mas[j];
                                    j++;
выводит только 0 1 первый массив в списке, а второй не выводит, да и потом когда уже в основной программе вывожу весь список пишет
0 1 1
1 1 0
как буд-то изменения не были применены
а как я понимаю должно хотя бы
0 1
1 1 0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
08.09.2014, 11:36  [ТС]     Цикл по односвязному списку #2
тема актуальна

Добавлено через 12 часов 21 минуту
тема актуальна
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
08.09.2014, 12:14  [ТС]     Цикл по односвязному списку #3
ну с циклом я вроде разобрался, теперь доходит и делает то что надо, но можете подсказать почему у меня значения в списке не перезаписываются?
C++
1
2
3
pVrem->mas[j]=pVrem->mas[y];//тут по идее должні вносится новые данные в список
                                    cout<<pVrem->mas[j];
                                    j++;
просто вот в этой части кода я по идее их перезаписываю и оно даже выводит то что нужно
Цикл по односвязному списку
но потом при выводи связей, всеравно остается 3 элемента
Название: форум1.png
Просмотров: 26

Размер: 818 байт
как будто они не были заменены тем чем нужно или я не так делаю, просто тут же я как бы сделал
C++
1
Elem *pVrem=pFirst;
значит оно должно указывать на то что мне нужно и заменять, но этого почему-то не происходит
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
08.09.2014, 15:40  [ТС]     Цикл по односвязному списку #4
все я разобрался, оно все нормально делало, просто я потом в цикле вывода не уменьшал количество выводим элементов))) и оно еще раз выводило последний элемент, а щас все ок) спасибо если кто думал как помочь
Yandex
Объявления
08.09.2014, 15:40     Цикл по односвязному списку
Ответ Создать тему
Опции темы

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