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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
#1

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

07.09.2014, 13:29. Просмотров 360. Ответов 3
Метки нет (Все метки)

добрый день, можете подсказать как можно сделать прохождение до конца списка, вообщем задача у меня такая, есть односвязный список с хранящимися в днем масивами, там только 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 13:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл по односвязному списку (C++):

Вопрос по односвязному списку. - C++
Ребят у меня такой вопрос! Нам в универе дали задание реализовать односвязный список на базе массива с индексными указателями. Все...

задача по односвязному списку (стеку) поиск фри-лансера - C++
необходимо написать функцию insert, добавляющую элемент в упорядоченный односвязный список. например список 1 3 7 добавляем 5: 1 3 5 7 ...

Обращение к списку ссылок - C++
class A { public: int x; }; int main() { list&lt;A * &gt;L; for(auto i = L.begin(); i != L.end(); ++i)

Обращаться к списку по индексу - C++
Хочу вообщем, чтобы обращаясь к какому-нибудь элементу по индексу получать доступ сразу к какому-то списку, не переходя постоянно между...

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
08.09.2014, 11:36  [ТС] #2
тема актуальна

Добавлено через 12 часов 21 минуту
тема актуальна
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
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
Сообщений: 324
Завершенные тесты: 1
08.09.2014, 15:40  [ТС] #4
все я разобрался, оно все нормально делало, просто я потом в цикле вывода не уменьшал количество выводим элементов))) и оно еще раз выводило последний элемент, а щас все ок) спасибо если кто думал как помочь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 15:40
Привет! Вот еще темы с ответами:

Задание на цикл с параметром и цикл с постусловием - C++
Помогите пожалуйста написать программу с этими циклами. 1. Вычислить и напечатать таблицу значений функции Z= (e^-x)sinx для 0&lt;=x&lt;=П,...

Цикл for/Цикл while Помогите срочно пожалуйста... - C++
1.Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. где a, b и c - действительные числа. 2.Цикл...

Вставка элемента в середину и поиск по списку - C++
Хеееелп! В с++ я шарю плохо. Есть прога, работающая со списком (код почти весь стырен), но идет только добавление в конец и начало списка....

Перемещение по списку с использованием стрелок в консоли - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.09.2014, 15:40
Ответ Создать тему
Опции темы

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