0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 33
1

Реализовать структуру данных "Линейный список"

10.09.2014, 09:03. Показов 1892. Ответов 4
Метки нет (Все метки)

Всем привет. Не получается написать программу к следующему заданию. На словах я понимаю, как это выполнить, но структурами раньше не сталкивался и поэтому не знаю, как да что. Подскажите что да как, пожалуйста.
Даны натуральные числа k, m, n и последовательности символов s1, s2,..., sk, t1, t2,..., tm, u1, u2,..., un. Получить по одному разу те символы, которые входят во все три последовательности.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2014, 09:03
Ответы с готовыми решениями:

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес"
Здравствуйте. Проходим тему Структуры, не могу понять, как определить количество, само задание: ...

Реализовать структуру "Список с пропусками" (Skip List)
Доброго времени суток. Кто-нибудь сталкивался с написанием данной структуры ? Наткнулся у...

Stack: реализовать структуру данных "стек"
Не проходит один тест в задаче. Пишет: Неправильный формат вывода Вот задача: Реализуйте...

Реализовать структуру данных "очередь"
Написать программу, содержащую описание очереди и моделирующую работу очереди, реализовав все...

4
923 / 830 / 284
Регистрация: 27.07.2012
Сообщений: 2,331
10.09.2014, 09:57 2
И причём тут линейный список и структуры?
0
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 33
10.09.2014, 11:56  [ТС] 3
John Prick
Такое задание. В теории в данном случае надо создать три структуры, состоящие из строк, и проверять наличие в них одинаковых символов.
0
2228 / 1731 / 865
Регистрация: 21.12.2010
Сообщений: 3,074
Записей в блоге: 11
10.09.2014, 22:24 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
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
 
class List
{
private:
    struct Node;
public:
    List() : root(0){}
    List(List const& rhs) : root(0)
    {
        Node const* tmp = rhs.root;
        while(tmp)
        {
            insert(tmp->c);
            tmp = tmp->next;
        }
    }
 
    Node* insert(char const _c)
    {
        Node* ret;
        if(!root)
        {
            ret = (root = new Node(_c));
        }
        else if(root->c >= _c)
        {
            Node* tmp = new Node(_c);
            tmp->next = root;
            ret = (root = tmp);
        }
        else
        {
            ret = root->insert(_c);
        }
        return ret;
    }
    // печать списка
    void print() const
    {
        Node const* tmp = root;
        while(tmp)
        {
            std::cout << tmp->c << "  ";
            tmp = tmp->next;
        }
    }
    //возвращает список - пересечение двух списков
    friend List set_intersection(List const a, List const b)
    {
        List ret;
        for(Node const* pa = a.root, *pb = b.root; pa && pb; )
        {
            if(pa->c == pb->c)
            {
                ret.insert(pa->c);
                do
                {
                    pa = pa->next;
                }
                while(pa && pa->c == pb->c);
            }
            else if(pa->c < pb->c)
            {
                do
                {
                    pa = pa->next;
                }
                while(pa && pa->c < pb->c);
            }
            else
            {
                do
                {
                    pb = pb->next;
                }
                while(pb && pb->c < pa->c);
            }
        }
        return ret;
    }
 
    ~List()
    {
        delete root;
        root = 0;
    }
private:
    // узел списка
    struct Node
    {
        Node(char const _c = char()) : c(_c), next(0){}
        Node* insert(char const _c)
        {
            Node* ret;
            if(!next)
            {
                ret = (next = new Node(_c));
            }
            else if(next->c >= _c)
            {
                Node* tmp = new Node(_c);
                tmp->next = next;
                ret = (next = tmp);
            }
            else
            {
                ret = next->insert(_c);
            }
            return ret;
        }
 
        ~Node()
        {
            if(next)
            {
                delete next;
                next = 0;
            }
        }
        char c;
        Node* next;
    };
 
    Node* root;
    List operator=(List const&);
};
 
int main()
{
    List l1, l2;
    l1.insert('a');
    l1.insert('a');
    l1.insert('a');
    l1.insert('c');
    l1.insert('c');
 
    l2.insert('b');
    l2.insert('a');
    l2.insert('a');
    l2.insert('c');
    l2.insert('a');
 
    set_intersection(l1, l2).print();
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 33
14.09.2014, 10:00  [ТС] 5
Спасибо igorrr37 , но надо без ООП.
Вот я тут большую часть уже сделал, осталось только логику проверки сделать, что бы только один раз символ выводился, который несколько раз встречался. Кто подскажет, как реализовать?
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <string.h>
 
using namespace std;
 
struct Spisok
{
    char a;
    struct Spisok *next;
};
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    Spisok *s, *sHead, *t, *tHead, *u, *uHead, *temp1;
    bool flag;
    int k, m, n;
 
    cout << "Введите кол-во символов списка s. k = \n";
    cin >> k;
 
    cout << "Введите кол-во символов списка t. m = \n";
    cin >> m;
 
    cout << "Введите кол-во символов списка u. n = \n";
    cin >> n;
 
    s = new Spisok;
    sHead = s;
 
    t = new Spisok;
    tHead = t;
 
    u = new Spisok;
    uHead = u;
 
    cout << "Введите элементы списка s\n";
    for (int i = 0; i < k; i++)
    {
        cin >> s -> a;
        if (i < k - 1)
        {
            s -> next = new Spisok;
        }
        else
        {
            s -> next = NULL;
        }
        s = s -> next;
    }
 
    cout << "Введите элементы списка t\n";
    for (int i = 0; i < m; i++)
    {
        cin >> t -> a;
        if (i < k - 1)
        {
            t -> next = new Spisok;
        }
        else
        {
            t -> next = NULL;
        }
        t = t -> next;
    }
 
    cout << "Введите элементы списка u\n";
    for (int i = 0; i < n; i++)
    {
        cin >> u -> a;
        if (i < k - 1)
        {
            u -> next = new Spisok;
        }
        else
        {
            u -> next = NULL;
        }
        u = u -> next;
    }
 
    cout << "\nПолучившийся список s:\n";
    s = sHead;
    for (int i = 0; i < k; i++)
    {
        cout << s -> a << " ";
        s = s -> next;
    }
 
    cout << "\nПолучившийся список t:\n";
    t = tHead;
    for (int i = 0; i < m; i++)
    {
        cout << t -> a << " ";
        t = t -> next;
    }
 
    cout << "\nПолучившийся список u:\n";
    u = uHead;
    for (int i = 0; i <n ; i++)
    {
        cout << u->a << " ";
        u = u -> next;
    }
    cout << "\n";
 
    s = sHead;
    t = tHead;
    u = uHead;
    while (s != NULL)
    {
        while (t != NULL)
        {
            while (u != NULL)
            {
                if ((s -> a) == (t -> a) && (s -> a) == (u -> a))
                {
                    flag = true;
                    temp1 = sHead;
                    if (temp1 == sHead && (t != tHead || u != uHead))
                        break;
                    if (s != sHead)
                    {
                        while (temp1 != s)
                        {
                            if ((temp1 -> a) == (s -> a))
                                flag = false;
                            temp1 = temp1 -> next;
                        }
                    }
                    if (flag == true)
                        cout <<  s-> a << " " << endl;
                }
                u = u -> next;
            }
            t = t -> next;
            u = uHead;
        }
        s = s -> next;
        t = tHead;
        u = uHead;
    }
    cin.get();
    cin.get();
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2014, 10:00

Реализовать односвязный список данных вида "Страна, город, количество населения"
Поставлена задача реализовать односвязный список данных вида Страна город количество населения...

Класс "Студент", реализовать динамический список "Группа студентов"
реализовать динамический список &quot; группа студентов&quot;. Узел: -группа -фамилия Функции списка:...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией")
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет плательщика&quot;; &quot;Счет...


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

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

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