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

Обратный связный список - C++

Восстановить пароль Регистрация
 
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
16.08.2012, 16:06     Обратный связный список #1
Всем привет!

Я уже голову сломал, но никак не могу создать связный список, который помещает новый элемент не в конец списка, а в начало... Помогите плз

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
#include<iostream>
using namespace std;
 
struct link
{
    int data;
    link* next;
};
 
class linklist
{
 
private:
 
    link* first;
 
public:
 
    linklist()
    {
        first = NULL;
    }
 
    void additem (int d);
    void display();
 
};
 
void linklist::additem(int d)
{
    link* newlink = new link;
    newlink->data = d;
    newlink->next = NULL;
 
    link* current = first;
    while(current->next)
    {
        current = current->next;
    }
    current->next = newlink;
    
    cout << "Entry added " << newlink->data << endl;
}
 
void linklist::display()
{
    link* current = first;
    while(current)
    {
        cout << current->data << endl;
        current = current->next;
    }
}
 
int main()
{
    linklist li;
 
    li.additem(25);
    li.additem(36);
    li.additem(49);
    li.additem(64);
 
    cout << "\nList:\n";
    li.display();
 
    system("pause");
    return 0;
}
P.S.: бьюсь над функцией additem();, сейчас она не работает..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
16.08.2012, 16:21     Обратный связный список #2
Вы переменной first так ничего и не присваиваете, нужно добавить случай для добавления первого элемента
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
16.08.2012, 16:26     Обратный связный список #3
Вопрос: А использование класса принципиально для вашей программы? Или можно без него обойтись?
ИМХО его использование здесь не оправдано.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
16.08.2012, 16:38     Обратный связный список #4
Цитата Сообщение от Hydrogen Посмотреть сообщение
Вопрос: А использование класса принципиально для вашей программы? Или можно без него обойтись?
ИМХО его использование здесь не оправдано.
использование класса для связного списка - это идеально..
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
16.08.2012, 16:50     Обратный связный список #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
#include <stdio.h>
#include <conio.h>
 
#include <iostream>
 
using namespace std;
 
class linkedlist
{
    typedef struct list
    {
        int data;
        list* next;
    } LIST;
private:
    LIST* list;
    LIST* head;
    LIST* tail;
 
public:
    linkedlist()
     { list = NULL;     tail = list; }
 
    void fill();
    void addhead(int d);
    void addtail(int d);
    void display();
 
};
 
void linkedlist::fill()
{
    for (int n = 0; n < 100; n++)
        if ((n % 2) == 0) addhead(10 * n);
        else addtail(20 * n);
}
 
void linkedlist::addhead(int d)
{
    LIST* node = new LIST;
    node->data = d; 
    head = node; node->next = list; 
    if (list == NULL) tail = node; 
    list = node;
}
 
void linkedlist::addtail(int d)
{
    LIST* node = new LIST;
    node->data = d; node->next = NULL;
    if (list != NULL)
     { tail->next = node; tail = node; }
    else { list = node; tail = list; }
}
 
void linkedlist::display()
{
    while(list != NULL)
    {
        cout << list->data << endl;
        list = list->next;
    }
}
 
int main()
{
    linkedlist li; 
    cout << "\nList:\n";
    li.fill(); li.display();
 
    _getch();
 
    return 0;
}
Миниатюры
Обратный связный список  
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
16.08.2012, 17:04     Обратный связный список #6
Цитата Сообщение от Leomana Посмотреть сообщение
Вопрос: А использование класса принципиально для вашей программы? Или можно без него обойтись?
ИМХО его использование здесь не оправдано.
использование класса для связного списка - это идеально..
Можно обойтись и обычной структурой (я уже так не раз делал, хотя структуры не очень далеко отстоят от классов).
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
16.08.2012, 17:06  [ТС]     Обратный связный список #7
Огромное спасибо!

Сейчас буду разбираться в решении.

А вообще помню последний раз так голову ломал когда со стеком заморачивался, не просто стек сделать, а чтобы он по кругу добавлял, и перезаписывал самый старый эдемент новым, но тогда сам догнал. Ну тут уж сдался... Еще раз спасибо!
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
16.08.2012, 17:16     Обратный связный список #8
Цитата Сообщение от Hydrogen Посмотреть сообщение
Можно обойтись и обычной структурой (я уже так не раз делал, хотя структуры не очень далеко отстоят от классов).
я больше скажу в C++ структура это то же самое что и класс, и различие только одно - установленная видимость по умолчанию
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
16.08.2012, 17:26     Обратный связный список #9
Цитата Сообщение от Leomana Посмотреть сообщение
я больше скажу в C++ структура это то же самое что и класс, и различие только одно - установленная видимость по умолчанию
Именно из-за установленной по умолчанию видимости я структуры использую несколько чаще чем классы: не нужно писать "private" "public" и т.п. чтобы обеспечить видимость. Меньше кода - меньше вес программы(думаю это и так понятно) даже если сэкономил всего на паре символов. Конечно это не сильно актуально, когда имеются "объемы" на ГБ оперативной памяти, но увы не все устройства ими обладают.
soon
16.08.2012, 18:53
  #10

Не по теме:

Hydrogen, я правильно вас понимаю - вы жертвуете удобочитаемостью и безопасностью ради беснословного сокращения программы?

Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
16.08.2012, 19:07     Обратный связный список #11
Цитата Сообщение от Hydrogen Посмотреть сообщение
Именно из-за установленной по умолчанию видимости я структуры использую несколько чаще чем классы: не нужно писать "private" "public" и т.п. чтобы обеспечить видимость. Меньше кода - меньше вес программы(думаю это и так понятно) даже если сэкономил всего на паре символов. Конечно это не сильно актуально, когда имеются "объемы" на ГБ оперативной памяти, но увы не все устройства ими обладают.
смех да и только.. о каких сокращениях вы пишите?
в структуре точно так же пишется Public и private , просто в структуре public по умолчанию, в отличие от класса - в котором private.. вы серьезно считаете , что если вы пишите эти спецификаторы то вы экономите ОП?? Надо книги читать) даже если в С++ структуру сделали как класс, и не значит, что надо радоваться и вместо класса использовать структуру, лучше структуру использовать так как она использовалась в С . зе енд ^_^
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
17.08.2012, 05:35     Обратный связный список #12
Цитата Сообщение от Leomana Посмотреть сообщение
смех да и только.. о каких сокращениях вы пишите?
Мб и смех, я новичок и не совсем компетентен. Тем не менее факт остаётся фактом:
Мне тем не менее удалось заменив классы структурами сэкономить дисковое пространство и RAM.
Может дело и в функциях-членах, которые я составлял, хз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 21:30     Обратный связный список
Еще ссылки по теме:

C++ Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента
C++ Связный список
C++ Связный список

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.08.2012, 21:30     Обратный связный список #13
Цитата Сообщение от Hydrogen Посмотреть сообщение
Меньше кода - меньше вес программы(думаю это и так понятно)
Меньше вес исходника всего-навсего. private-public-protected - это нужно только компилятору. Компилятор проверяет, не пытается ли неуполномоченный код обратиться к привилегированным данным, в ассемблере уже никаких этих проверок нет.
Здесь же речь о другом - об ООП. Пока вы не понимаете, для чего это нужно, и, фактически, заменяете ОО-код (данные едины с методами их обработки) обычным процедурным стилем, как было в Си (данные отдельно, методы обработки отдельно, всё это перемешано и не понятно, кто с чем что делает), не понимаете, чем хорошо сокрытие реализации и раскрытие только интерфейса, не задумываетесь (раз вы новичок) о поддержке кода (а только о его написании). А раз вы этого не понимаете - не стоит об этом судить и говорить, что класс для списка неуместен. Реализация абстрактной структуры данных - идеальный пример для того, чтобы показать, чем хорош ОО-стиль.
Yandex
Объявления
20.08.2012, 21:30     Обратный связный список
Ответ Создать тему
Опции темы

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