Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Visp1024
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 4
#1

Организация вывода списка - C++

13.01.2013, 07:10. Просмотров 400. Ответов 4
Метки нет (Все метки)

При простом связанном хранении каждый элемент списка представляет собой структуру nd, состоящую из двух элементов: val - предназначен для хранения элемента списка, n - для указателя на структуру, содержащую следующий элемент списка. На первый элемент списка указывает указатель dl. Для всех операций над списком используется описание:

C++
1
2
3
4
5
typedef struct nd
          {  float val;
             struct nd * n;  }  ND;
        int i,j;
        ND * dl, * r, * p;
Вопрос, как организовать вывод всех элементов списка? (С++)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 07:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Организация вывода списка (C++):

организация поиска и вывода информации в С++ - C++
Добрый день! Помогите пожалуйста разобраться, я новичок, только начинаю изучать С++. Нужно организовать поиск по заданному курсу и вывод...

Организация вывода с использование вложенных циклов - C++
Напечатать числа в виде следующей таблицы:

Организация ввода и вывода одномерных массивов в турбо С - C++
При поступлении в вуз абитуриенты, получившие двойку на первом экзамене, ко второму не допускаются. В массиве A записаны оценки...

Работа с двоичными файлами, организация ввода-вывода структурированной информации/ - C++
Сформировать двоичный файл из элементов, заданной в варианте структуры, распечатать его содержимое, выполнить удаление и добавление...

Организация файлового ввода/вывода (работа с текстовыми и двоичными файлами) - C++
1(работа с текстовыми файлами) -Дан текстовый файл.Переписать в новый файл все его строки, вставив в конец каждый строки колличество...

организация списка : удаление и внесение новых элементов - C++
Приветствую! У меня есть односвязный список. Изначально он пустой и я вношу какие то значения, например, 1 , 2 , 3 , все выводится в...

4
MLPMan
Кандёхаем веселее!
286 / 283 / 35
Регистрация: 02.10.2012
Сообщений: 1,995
13.01.2013, 07:59 #2
C++
1
2
3
4
5
6
nd nd1;
while (true)
{
WriteData(nd1.val);
if (nd1.n==NULL) break; else nd1 = *(nd1.n);
}
Как-нибудь так.

Добавлено через 13 минут
Ну что, работает? Чувствую, кривой этот код.
0
Visp1024
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 4
13.01.2013, 08:04  [ТС] #3
MLPMan, Ага, сейчас напишу свои наработки

Добавлено через 4 минуты
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
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
typedef struct nd
{
    int val;
    struct nd * n;} ND;
 
class Chislo {
public:
    int i,j;
    ND * dl, * r, * p;
    
public:
       //Конструктор с добавлением и выводом 5 эллементов списка
    Chislo(){
        for (int i=0; i<5; i++){
            r=(ND *)malloc(sizeof(ND));
            r->n=p->n;
            r->val=5;
            p->n=r; 
            printf("%i ",r->val);
        }
        printf("\n");
    }
    
    //деструктор
    ~Chislo(){}
    
    //Перегрузка ++ с добавлением эллемента и выводом списка
    Chislo operator++(){
        r=(ND *)malloc(sizeof(ND));
        r->n=p->n;
        r->val=5;
        p->n=r; 
        
    //      ND * head = dl;
    //do{
    //std::cout<<head->val<<std::endl;         //Вариант вывода №1
    //head = head->n;
    //}while(head);
 
    //   r=dl;
    //    while(r!=NULL){
    //    printf(" %i ",r->val);                        //Вариант вывода №2
    //    r=r->n;}
    //    printf("\n");
    //    }
 
  //Перегрузка -- с удалением эллемента и выводом списка
    Chislo operator--(){
        p->n=r->n; free(r->n);
    }
};  
 
 
int main()
{
    Chislo m;
    ++m;
    getch();
    return 0;
}
По сути оба варианта вывода идентичны, как в принципе и то, что оба крашатся на выводе 2-го эллемента.
0
MLPMan
Кандёхаем веселее!
286 / 283 / 35
Регистрация: 02.10.2012
Сообщений: 1,995
13.01.2013, 08:35 #4
Может, dl, r, p должны быть просто переменными, а не указателями?
Тогда

C++
1
ND  dl,  r,  p;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dl.val=100;
dl.n=&r;
r.val=250.2;
r.n=&p;
p.val=33.333;
 
ND *nd1;
 
nd1 = &dl;
Memo1->Lines->Clear();
while (true) {
Memo1->Lines->Add(FloatToStr(nd1->val));
if (nd1->n==NULL) break; else nd1=(*nd1).n;
}
Вывод:
Код
100
250,199996948242
33,3330001831055
0
Visp1024
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 4
13.01.2013, 18:07  [ТС] #5
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
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
//ÑòðóêòóðГ* Г±ГЇГЁГ±ГЄГ*
struct Node
{
    int val;
    Node *next;
};
 
//Îáüÿâëÿåì ГЄГ«Г*Г±Г± ëèñò
class List
{
private:
        Node *head, *tail;
 
public:
       //ГЉГ®Г*ñòðóêòîð
        List()
        {
            head=tail=NULL;
        }
        List(int num)
        {
            head = new Node;
            head->next = NULL;
            head->val = num;    
            tail = head;
        }
        
        //äåñòðóêòîð
        ~List()
        {
        while (head != NULL)
            --*this;
        }
 
        //ÏåðåãðóçêГ* ++ Г± äîáГ*âëåГ*ГЁГҐГ¬ ýëëåìåГ*ГІГ* Гў ГЄГ®Г*ГҐГ¶ Г±ГЇГЁГ±ГЄГ*
        List& operator++()
        {
            Node* tmp = new Node;
            tmp->next = NULL;
            tmp->val = 5;
            tail->next = tmp;
            tail = tmp;
            return *this;
        }
 
        //Âûâîä Г±ГЇГЁГ±ГЄГ*
        void Print()
        {
            Node* tmp = head;
            while (tmp!=NULL)
            {
                cout<<tmp->val<<" ";
                tmp = tmp->next;
            }
            cout<<endl;
        }
 
        //ÏåðåãðóçêГ* -- Г± ГіГ¤Г*ëåГ*ГЁГҐГ¬ ýëëåìåГ*ГІГ* Гў Г*Г*Г·Г*ëå Г±ГЇГЁГ±ГЄГ*
        List& operator--()
        {
            if (head != NULL)
            {
                Node* tmp = head;
                head = head->next;
                delete tmp;
            }
            return *this;
        }
    };  
 
 
    int main()
    {
        List list(5);
        for (int i=0; i<10; i++){
            ++list;
            list.Print();}
        for (int i=0; i<10; i++){
            --list;
            list.Print();}
        list.~List();
        getch();
        return 0;
    }
Вот допилил, вдруг кому пригодится.
0
13.01.2013, 18:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 18:07
Привет! Вот еще темы с ответами:

по контрольной вопрос по поводу вывода списка - C++
Люди помогите плиз задача такая хочу добавить в список выбора ну так где вводу с текстового файла типизированного и так далее еще один...

Ошибка вывода односвязного списка на экран - C++
Сначала считал односвязный список из файла, но теперь какая то странная ошибка - односвязный список выводится на экран, но появляется вот...

Краш во время вывода списка на экран - C++
Имеется некоторый код (код трохи по-калечному написан, не важно). Суть в том, что он выкидывает необработанное исключение после запуска при...

Как работает функция вывода элементов списка? - C++
Ребят, объясните в кратце, как работает функция вывода элементов списка(любая), например такая. и если кто знает, дайте...


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

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

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