Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, моделирующую заполнение гибкого магнитного диска http://www.cyberforum.ru/cpp-beginners/thread869643.html
Составить программу, моделирующую заполнение гибкого магнитного диска. Общий объем памяти на диске 360 Кбайт. Файлы имеют произвольную длину от 18 байт до 32 Кбайт. В процессе работы файлы либо...
C++ Алгоритмы на графах может кто может подсказать: как работать со списком рёбер для реализации алгоритмов для поиска расстояний в графе? http://www.cyberforum.ru/cpp-beginners/thread869637.html
C++ Сравнение C++ с С#
Какие существенные достоинства и недостатки C++ есть по сравнению с C# ?
getline работа с файлами C++
Читаю книгу: философия с++ и там есть некий пример работы с файлами:#include <string> #include <fstream> #include <iostream> using namespace std; int main() { ifstream in ("test.txt");...
C++ Задачка,структура,найти самого отстающего студента http://www.cyberforum.ru/cpp-beginners/thread869623.html
вот задачка , вводиш 10 фамилий и по 1 отценке , а как сделать чтобы вводить 5 фамилий и по 3 оценки каждому. #include<iostream.h> #include<math.h> void main() { struct suny { char...
C++ вставка и удаление в древо бинарного поиска (ошибка: invalid conversion from 'int' to 'int*') Здравствуйте. Подскажите почему ошибка? ошибка: invalid conversion from 'int' to 'int*' #include <iostream> #include <stdio.h> #include <time.h> #include <stdlib.h> using namespace std; ... подробнее
Utkin53
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 25
0

Динамический список, беглый указатель

18.05.2013, 21:14. Просмотров 516. Ответов 13
Метки (Все метки)

Здравствуйте, помогите решить следующую проблему: в задании сказано создать двусвязный динамический список и произвести с ним некоторые действия. Список создан, заполнен, но не могу в функцию передать указатель на конец списка. Если указатель на начало передан, то на конец не получается, так как след его теряется после функции объявления и заполнения списка.
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
#include <iostream>
#include <conio.h>
using namespace std;
struct sp
{
    int nomer;
    int versh[15];
    int kolvo;
    sp *up,*next;
};
sp *add () //объявление
{
    FILE *fi;
    int n,l,nm,kl=0,u=0,j; 
    static sp *begin=NULL,*last=NULL;//last-тот самый указатель на конец
    sp *list=NULL,*up=NULL;
    fi=fopen ("f_in.txt","rt");
    fscanf (fi,"%d",&n);
    for (l=0;l<n;l++)
    {
        list=new sp;
        if(begin==NULL)
        {
            begin=list;
        }
        list->up=up;
        fscanf (fi,"%d",&nm);
        list->nomer=nm;
        for (j=0;j<10;j++)
        {
            fscanf (fi,"%d",&u);
            if (u==-1)
                break;
            list->versh[j]=u;
            kl=kl+1;
        }
        list->kolvo=kl;
        kl=0;
        if(up!=NULL)
        {
            up->next=list;
        }
        up=list;
    }
    last=list;//здесь он ещё определён
    list->next=NULL;
    return begin;//примерно так я передал указатель на начало
}
 
void print (sp *begin,sp *list)//вывод списка
{
    int j;
    list=begin;
    while (list)
    {
        cout<<"\n nomer vershini "<<list->nomer<<"\tkolvo  "<<list->kolvo;
        cout<<"\tokrest ";
        for(j=0;j<list->kolvo;j++)
        {
            cout<<list->versh[j]<<" ";
        }
        list=list->next;
    }
}
sp* search (sp *begin,sp *list,sp *last) //функция, куда надо передать этот last
{
    sp *max=NULL;
    int maxi=0;
    list=begin;
    while (list)
    {
        if (list->kolvo>maxi)
        {
            max=list;
            maxi=list->kolvo;
        }
        list=list->next;
    }
    cout<<"\n max kolvo"<<max->kolvo;
    list=max;
        if(list==begin)
    {
        begin=list->next;
    }
    else
    {
        if (list!=last)
        {
        list=list->up;
        list->next=list->next->next;
        list->next->up=list;
        }
        else
        {
            last=list->up;
        }
    }
    return begin;
}
void main (sp *begin,sp *list,sp *last)
{
    begin=add ();//определение указателя на начало
    print (begin,list);
    begin=search (begin,list,last);
    print (begin,list);
    getch ();
}


Вернуться к обсуждению:
Динамический список, беглый указатель
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 21:14
Готовые ответы и решения:

Динамический массив и указатель на указатель
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом...

Динамический массив и указатель
Всем привет. Пытаюсь понять тему динамических массивов. Прошу помочь...

Указатель на динамический массив
Как сделать указатель на размер двухмерного динамического массива? Пробовал int...

Указатель на двухмерный динамический массив
Друзья, нужна Ваша помощь! Создаю одномерный динамический, создаю указатель на...

Умный указатель и динамический массив
Здравствуйте! Есть проблема со следующим заданием. Есть класс умного указателя,...

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