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

односвязный список - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Olga_LED
0 / 0 / 0
Регистрация: 04.05.2011
Сообщений: 9
09.05.2011, 01:38     односвязный список #1
Доброго времени суток!
У меня такой вопрос: нужно разработать класс, реализующий линейный односвязный список. Методы класса: добавление элемента к концу списка, просмотр списка, удаление n-го элемента из списка. Поля записей: автор книги, год издания книги. Я написала для автора. А как в этот список включить еще год издания? Я так понимаю, список должен идти "автор год автор год ...".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 01:38     односвязный список
Посмотрите здесь:

Односвязный список C++
Односвязный список C++
C++ Односвязный список.
Односвязный список C++
Односвязный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
09.05.2011, 01:48     односвязный список #2
Отформатируй код, чтобы было красиво; напиши комменты, выложи сюда, посмотрим чё там и как у тебя...
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
09.05.2011, 02:06     односвязный список #3
Цитата Сообщение от Olga_LED Посмотреть сообщение
Доброго времени суток!
У меня такой вопрос: нужно разработать класс, реализующий линейный односвязный список. Методы класса: добавление элемента к концу списка, просмотр списка, удаление n-го элемента из списка. Поля записей: автор книги, год издания книги. Я написала для автора. А как в этот список включить еще год издания? Я так понимаю, список должен идти "автор год автор год ...".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Class List
{
private:
      string name_author;//имя автора
      int year;//год издания
      
      *List next;//указатель на следующий э-т
public:
      /*
      конструкторы, деструкторы
      объявление и реализация методов класса
      */
};
вот так должен выглядеть у тебя класс=/ можешь добавлять туда не только год добавить=)
Olga_LED
0 / 0 / 0
Регистрация: 04.05.2011
Сообщений: 9
09.05.2011, 02:20  [ТС]     односвязный список #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
//Elem.h
#include<ostream>
class Elem
{
protected:
    Elem *next; // Указатель на следующий элемент
    char* data;// Содержит данные типа символов
public:
         //констукторы
    Elem(): data(), next(NULL) {}
    Elem(char* dataValue): 
        data(dataValue), next(NULL){} 
        //перегруз <<
    friend std::ostream& operator<<(std::ostream& s, Elem & el)
    {
        s<<el.data;
        return s;// Возвращаем значение поля данных данного элемента
    }
    char* getData();// Метод -  получить для данного элемента
    void setData(char* value);// Метод - задать значение для данного элемента
    char* getAData()
    {
        char* dt = data;
        return dt;
    }
 
    Elem* getNext();
    void setNext(Elem *el);
 
 
};
//Elem.cpp
#include "Elem.h"
 
char* Elem::getData()
{
    return data;
}
void Elem::setData(char* value)
{
    data=value;
}
 
 
 
Elem* Elem::getNext()
{
return next;
}
 
void Elem::setNext(Elem *el)
{
    next=el;
}
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
//IntList.h
#include "Elem.h"
 
class IntList
{
protected:
    Elem *beg;
    int count;
public:
    //конструкторы
    IntList(): count(0), beg(NULL) {}
    Elem* Add(char* Value);// Добавление элемента в список
 
    void Delete(int index);// Удаление элемента из списка
    ~IntList();// Деструктор
    Elem* getBeg();// Получить начальный элемент списка
    int getCount();// Получить номер
 
    // Перегрузка оператора <<  
    friend std::ostream& operator<<(std::ostream& s, IntList& iList)
    {
        Elem *el;
        el=iList.getBeg();
        for (int i=0; i<iList.getCount(); i++)
        {
            s<<"Воок: "<<el->getData()<<" " ;
            el=el->getNext();
        }
        return s;
    }
 
    // Перегрузка оператора [] для того, чтобы можно было обращаться к элементу через индекс
    char* operator[](int index)
    {
        Elem *el;
        el = beg;
        for (int i=0;i<count; i++)
        {
            if (index == i)  
                break;
            el = el->getNext();
        }
        return el->getAData();
    }
};
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
//IntList.cpp
#include "IntList.h"
 
Elem* IntList::Add(char* Value) // Добавление элемента в список
{
    Elem *new_el, *el;
    if (count==0) // Если добавляемый элемент 0
    {
        beg=new Elem(Value);// Значению beg присваиваем значение Value
        new_el=beg;
    }
    else
    {
        new_el=new Elem(Value);
        el=beg;
        for (int i=0; i<count; i++)
        {
            if (i==count-1)//Если находимся на предыдущем элемента
            {
                el->setNext(new_el);// Добавляем в конец
                break;
            }
            el=el->getNext();
        }
    }
    count++; // Увеличиваем значение количества списка на 1
    return new_el;
}
 
void IntList::Delete(int index)// Удаление элемента из списка
                               // входное значение по номеру - index
{
    Elem *el, *del_el;
    if ((count==0) || (index >=count))// Если количество элементов равно нулю или больше чем количество элементов,
        return;                          // то ничего не делаем
    if ((index==0))// Если индекс указывает на начальное значение,то значит это beg
    {
        el=beg;
        if (beg->getNext()!=NULL)
            beg=beg->getNext();//beg сдвигаем на одну позицию вперед и данный элемент удаляем
        delete el;
        count--;  // уменьшаем количество элементов на 1
        return;
    }
    el=beg;// указатель на начало списка
    for (int i=0; i<count; i++)                       
    {
        if ((i==(index-1)) && (index==count-1)) // Если находимся в цикле на предыдущем значении index и index является предыдущим значением
        {                                        //удаляемый элемент - следующий за данным
            del_el=el->getNext();
            el->setNext(NULL);
            delete del_el;// удаляем элемент
            count--;
            return;
        }
        if (i==(index-1))// Если находимся в цикле на предыдущем значении для индекса
        {
            del_el=el->getNext();// удаляемый элемент - следующий за данным
            el->setNext(del_el->getNext());
            delete del_el;// удаляем элемент
            count--;
            return;
        }
        el=el->getNext(); // указатель теперь на следующий элемент
    }
}
 
IntList::~IntList()
{
    for (int i=0, cnt=count; i<cnt; i++)
        Delete(0);
}
 
Elem* IntList::getBeg()
{
    return beg;
}
int IntList::getCount()
{
    return count;
}
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
//List.cpp
#include <iostream>
#include "IntList.h"
int main(int argc, char* argv[])
{
    setlocale(0,"");
    IntList il;
        il.Add("Жуков");
        il.Add("Кейси,Паниш");
        il.Add("Епифанов");
    std::cout<<il;
    il.Add("Смитт");
    std::cout<<std::endl;
    std::cout<<il;
    il.Delete(1);
    std::cout<<std::endl;
    std::cout<<il;
    
    return 0;
    
 
    system("PAUSE");
    
 
}
Добавлено через 7 минут
Цитата Сообщение от I_like_C++ Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Class List
{
private:
      string name_author;//имя автора
      int year;//год издания
      
      *List next;//указатель на следующий э-т
public:
      /*
      конструкторы, деструкторы
      объявление и реализация методов класса
      */
};
вот так должен выглядеть у тебя класс=/ можешь добавлять туда не только год добавить=)
это понятно..или я уже туплю просто ночью.. а,начало доходить)
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
09.05.2011, 02:24     односвязный список #5
class Elem тебе только надо изменить
C++
1
2
3
4
Elem *next; // Указатель на следующий элемент
 char* data;// Содержит данные типа символов[/quote]
 
int year;//год
и везде: в конструкторах, методах этого класса прописывай эту переменную
Olga_LED
0 / 0 / 0
Регистрация: 04.05.2011
Сообщений: 9
09.05.2011, 02:25  [ТС]     односвязный список #6
ну да,я уже так и делаю) спасибо))
Yandex
Объявления
09.05.2011, 02:25     односвязный список
Ответ Создать тему
Опции темы

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