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

АТД список. Односвязный список с двумя параметрами - C++

Восстановить пароль Регистрация
 
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
08.11.2011, 02:43     АТД список. Односвязный список с двумя параметрами #1
Здравствуйте.

Нужна помощь!

Нужно реализовать класс для работы с односвязным линейным списком с двумя параметрами, не используя стандартную библиотеку!

Класс должен уметь выполнять следующие действие:

Добавление элемента в начало списка

void push_front ( int id, char* name);

идентификатор ( id ) - целое число;
наименование ( name ) - строка (не более 255 символов).

Не пойму как может ячейка в списка принимать 2 значение???
насколько я знаю ячейка в списке содержит элемент и указатель на следующий элемент списка!

с одним параметром я реализовал, тут проблем вообще то не может быть!

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
//SList.h
 
#include "iostream"
#include "string"
 
using namespace std;
 
struct element
{
     std::string a;
     element *next;
};
 
class SList
{
public:
    
    SList(void);
    void push_front(std::string c);
    void print();
    ~SList(void);
private:
        element *head;
        int count;
};
 
 
SList::SList(void)//конструктор
{
    head = NULL;
    count = 0;
}
 
SList::~SList(void)//деструктор
{
     element *h;
    if (head)
    {
        do
        {
            h = head;
            head = h->next;
            delete h;
        }
        while (head);
    }
}
 
 
void SList::push_front(string c)
{
     if (head == NULL)
     {
        head = new element;
        head->a = c;
        head->next = NULL;
        count = 1;
     }
     else
     {
        element *h;
        h = new element;
        h->a = c;
        h->next = head;
        head = h;
        count++;
     }
}
 
void SList::print()
{
     if (head == NULL)
     {
         cout << "Список пуст\n";
     }
     else
     {
        element *h, *t;
        h = head;
        do
        {
            cout << h->a << "\n";
            t = h->next;
            h = t;
        }
        while(h);
        cout<<"\n";
     }
}
SList.cpp
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
#include "iostream"
#include "string"
#include "SList.h"
 
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    string elem; 
    
    SList lst;
    
    cout << "Введите єлементы в список: \n";
    for(int i = 0; i < 4; i++)
    {
        getline(cin, elem);
        lst.push_front(elem);
    }
    cout << "Наш список:\n";
    
    lst.print();
    
    system("pause >> null");
    return 0;
}
Подскажите каким способом можно передать в функцию добавления элементов списка два параметра??

Например:

lst.push_front( 5, "name_50");
lst.push_front( 3, "name_60");
lst.push_front( 2, "name_70");

На выходе хочу получить что то типа этого!

5 name_50
3 name_60
2 name_70

Ума не приложу как передать два параметра!

И вообще это реально сделать с помощью списков??
Спасибо!

Добавлено через 1 час 38 минут
Все спасибо, сам разобрался!)

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 "iostream"
#include "string"
 
 
 
using namespace std;
 
struct element
{
     std::string a;
     int num;
     element *next;
};
 
class SList
{
public:
    
    SList(void);
    void push_front(int id, std::string c);
    void print();
    ~SList(void);
private:
        element *head;
        int count;
};
 
SList::SList(void)//конструктор
{
    head = NULL;
    count = 0;
}
 
SList::~SList(void)//деструктор
{
     element *h;
    if (head)
    {
        do
        {
            h = head;
            head = h->next;
            delete h;
        }
        while (head);
    }
}
 
 
void SList::push_front(int id, string c)
{
     if (head == NULL)
     {
        head = new element;
        head->a = c;
        head->num = id;
        head->next = NULL;
        count = 1;
     }
     else
     {
        element *h;
        h = new element;
        h->a = c;
        h->num = id;
        h->next = head;
        head = h;
        count++;
     }
}
 
void SList::print()
{
     if (head == NULL)
     {
         cout << "Список пуст\n";
     }
     else
     {
        element *h, *t;
        h = head;
        do
        {
            cout << h->num << " "<< h->a << "\n";
            t = h->next;
            h = t;
        }
        while(h);
        cout<<"\n";
     }
}
срр - файл
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
#include "iostream"
#include "string"
#include "SList.h"
 
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    string elem; 
    
    SList lst;
    
    cout << "Введите єлементы в список: \n";
    for(int i = 0; i < 4; i++)
    {
        getline(cin, elem);
        lst.push_front(i, elem);
    }
    cout << "Наш список:\n";
    
    lst.print();
    
    system("pause >> null");
    return 0;
}
Спасибо, что может кто то постарался!)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 02:43     АТД список. Односвязный список с двумя параметрами
Посмотрите здесь:

C++ АТД-однонаправленный список
АТД список. Сравнение элементов C++
АТД список. Объединение списков. C++
АТД список. Замена элементов в списке C++
C++ АТД список. Перемещение заданного элемента на первую позицию
C++ Атд список. Удалить одинаковые элементы.
АТД список. Переставить местами элементы списка C++
C++ [C++] Реализуйте АТД “Список” для любого типа данных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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