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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Mako-chi
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 3
#1

Создать линейный список по уже имеющийся структуре "Записная книжка" - C++

17.04.2013, 10:03. Просмотров 1517. Ответов 4
Метки нет (Все метки)

У меня довольно таки сложная последняя лабораторная.(для меня, по крайней мере)
Нужно создать линейный список по уже имеющийся структуре(это у меня было в первой лабе)
1. Линейный список
а) добавление записи
б) удаление записи
в) редактирование полей записи
г) поиск элемента по заданному полю
д) сортировка по заданному полю
2. чтение списка из файла и записи в файл
3. написать консольный интерфейс

Не прошу помочь написать программу, хочу сама разобраться. Буду очень признательна, если поможете. Теорию я почитала, но хотелось бы конкретный пример что-ли, желательно с комментариями. Чтобы я хоть как-то смогла увязать это со своей задачей.

Собственно, моя структура. "Записная книжка"
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
#include <iostream>
 
#include <conio.h>
 
#include <stdio.h>
 
using namespace std;
 
 
 
struct book
 
{ char name [10];
 
long int number;
 
int birthday[3];
 
};
 
 
int main()
 
 
{ 
book N[5];
 
N[0].name[10]= 'Mariya'; N[0].number=89622293936; N[0].birthday[0]=1994; N[0].birthday[1]=12; N[0].birthday[2]=15;
 
N[1].name[10]= 'Sasha'; N[1].number=89098050308; N[1].birthday[0]=1995; N[1].birthday[1]=2; N[1].birthday[2]=21;
 
N[2].name[10]= 'Katya'; N[2].number=89508003050; N[2].birthday[0]=1991; N[2].birthday[1]=5; N[2].birthday[2]=1;
 
N[3].name[10]= 'Sveta'; N[3].number=89135054108; N[3].birthday[0]=1987; N[3].birthday[1]=8; N[3].birthday[2]=15;
 
N[4].name[10]= 'Vika'; N[4].number=89037814849; N[4].birthday[0]=1990; N[4].birthday[1]=6; N[4].birthday[2]=30;
 
 
 
for( int i=0; i<3; i++)
 
cout<<N[i].name<<endl<<N[i].numder<<endl<<N[i].birthday[0]<<"."<<N[i].birthday[1]<<"."<<N[i].birthday[0]<<endl<<endl;
 
return 0;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 10:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать линейный список по уже имеющийся структуре "Записная книжка" (C++):

Реализовать класс "записная книжка" с конструктором и деструктором - C++
1. Написать класс, объектами которого являются записи в записной книжке. Каждая запись состоит из следующих полей: имя, фамилия, номер...

Разработать класс "Записная книжка" - C++
Разработать класс &quot;Записная книжка&quot;. Используйте массив для хранения записей.Реализуйте методы добавления, удаления, поиска телефона по...

Структура "Записная книжка" - C++
Добрый день, Задание описано ниже, но я застрял на добавлении новой записи. после ввода всех полей выдает то, что на картинке ниже....

Создать линейный список "Сведения о квартирах" - C++
картотека в бюро обмена квартир организована как линейный список. Сведения о каждой квартире содержат: количество комнат; этаж; ...

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

Создать линейный список "Анкета" - C++
условие: Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: 1)возраст 2)пол...

4
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
17.04.2013, 17:07 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Mako-chi, вот накидал пару функций, можешь разобраться, я конечно не слишком селен в объяснении, но попробовал

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
#include <iostream>
#include <locale>
using namespace std;
 
/*твоя структура*/
struct book
{ 
    char name[10];
    long int number;
    int birthday[3];
 
    /*я добавил функцию для ввода данных*/
    void input(){
        cout << "Enter the name: ";
            cin >> name;
        cout << "Enter the number: ";
            cin >> number;
        cout << "Enter birthday: ";
            cin >> birthday[0] >> birthday[1] >> birthday[2];
    }
 
    /*функция для вывода данных*/
    void output(){
        cout << name << '\t' << number << '\t' << birthday[0] << '.' <<
            birthday[1] << '.' << birthday[2] << '\n';
    }
};
 
/*в элементах списка находяться указатели на нашу стрктуру
и каждый элмент списка указывает на следующий*/
struct ListNode
{
    book *data;
    ListNode *next;
};
 
class List
{
    private:
        ListNode *first;            //голова списка
 
    public:
        List()
        {
            first = NULL;           //список изначально пустой
        }
 
        void addAtFront()               //функция добавления в начало списка
        {
            book *in = new book;        //выделяем память под указатель на структуру
            in -> input();              //вводим данные о человеке
 
            ListNode *Ptr = new ListNode;       //выделяем память под элемент списка
            Ptr -> data = in;                   //кладем данные о человеке
            Ptr -> next = NULL;                 //следующих данных нет(NULL - признак конца списка)
 
            if(first == NULL)               //если список пуст
            {
                first = Ptr;                //введенные данные будут первой записью
            }
            else                            //иначе
            {
                ListNode *Ptr_f = first;            //первая запись(голова списка)
                first = Ptr;                        //головой становится новая запись
                Ptr -> next = Ptr_f;                //новая запись указывает на бывшую голову
            }
        }
 
        void removeAtFront()            //удаление первой записи
        {
            if(first == NULL)                   //если список пуст
                wcout << L"Список пуст!\n";
            if(first -> next == NULL)           //для списка с 1 элементом
            {
                delete first;               //удалили голову
                first = NULL;               //список пуст
            }
            else
            {
                ListNode *temp = first -> next; //элемент после головы(будет новой головой)
 
                delete first;       //удаляем голову
                first = temp;       //теперь следующий элемент после головы стал головой
            }
        }
 
        void showItem()                 //вывод списка
        {
            ListNode *current(first);       //голова списка
 
            if(current == NULL)             //если список пуст выводим сообщение
                wcout << L"Список пуст!";
            else
            {
                wcout << L"Список: ";
                while(current != NULL)          //идем по списку
                {
                    current -> data -> output();        //выводим элемент
                    current = current -> next;          //переходим к следующему
                }
            }
 
            cout << endl;
        }
};
 
int main()
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    List op;                    //объявляем объект класса
    op.addAtFront();            //вызов метода добавления элемента списка
    op.showItem();              //вызов метода вывода списка на консоль
 
    cout << "\n\n";
    return 0;
}
1
Mako-chi
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 3
19.04.2013, 05:29  [ТС] #3
yoghurt92, если не вводить данные человеке через клавиатуру, а считывать с файла, как это будет выглядеть?
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.04.2013, 08:30 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Mako-chi, вот так

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
#include <iostream>
#include <fstream>
#include <locale>
using namespace std;
 
/*твоя структура*/
struct book
{ 
    char name[10];
    long int number;
    int birthday[3];
 
    /*я добавил функцию для ввода данных*/
    void input(ifstream &fin){
        fin >> name >> number >> birthday[0] >>
            birthday[1] >> birthday[2];
    }
 
    /*функция для вывода данных*/
    void output(){
        cout << name << '\t' << number << '\t' << birthday[0] << '.' <<
            birthday[1] << '.' << birthday[2] << '\n';
    }
};
 
/*в элементах списка находяться указатели на нашу стрктуру
и каждый элмент списка указывает на следующий*/
struct ListNode
{
    book *data;
    ListNode *next;
};
 
class List
{
    private:
        ListNode *first;            //голова списка
 
    public:
        List()
        {
            first = NULL;           //список изначально пустой
        }
 
        void addAtFront(ifstream &fin)         //функция добавления в начало списка
        {
            book *in = new book;        //выделяем память под указатель на структуру
            in -> input(fin);              //вводим данные о человеке
 
            ListNode *Ptr = new ListNode;       //выделяем память под элемент списка
            Ptr -> data = in;                   //кладем данные о человеке
            Ptr -> next = NULL;                 //следующих данных нет(NULL - признак конца списка)
 
            if(first == NULL)               //если список пуст
            {
                first = Ptr;                //введенные данные будут первой записью
            }
            else                            //иначе
            {
                ListNode *Ptr_f = first;            //первая запись(голова списка)
                first = Ptr;                        //головой становится новая запись
                Ptr -> next = Ptr_f;                //новая запись указывает на бывшую голову
            }
        }
 
        void removeAtFront()            //удаление первой записи
        {
            if(first == NULL)                   //если список пуст
                wcout << L"Список пуст!\n";
            if(first -> next == NULL)           //для списка с 1 элементом
            {
                delete first;               //удалили голову
                first = NULL;               //список пуст
            }
            else
            {
                ListNode *temp = first -> next; //элемент после головы(будет новой головой)
 
                delete first;       //удаляем голову
                first = temp;       //теперь следующий элемент после головы стал головой
            }
        }
 
        void showItem()                 //вывод списка
        {
            ListNode *current(first);       //голова списка
 
            if(current == NULL)             //если список пуст выводим сообщение
                wcout << L"Список пуст!";
            else
            {
                wcout << L"Список:\n";
                while(current != NULL)          //идем по списку
                {
                    current -> data -> output();        //выводим элемент
                    current = current -> next;          //переходим к следующему
                }
            }
 
            cout << endl;
        }
};
 
int main()
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    ifstream fin("file.txt", ios::in);
 
    List op;                    //объявляем объект класса
    op.addAtFront(fin);            //вызов метода добавления элемента списка
    op.addAtFront(fin);            //вызов метода добавления элемента списка
    op.showItem();              //вызов метода вывода списка на консоль
 
    fin.close();
    cout << "\n\n";
    return 0;
}
1
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
22.04.2013, 13:52 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Mako-chi, ну как основу могу вот так показать

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
#include <iostream>
#include <list>
#include <cstdlib>
#include <algorithm>
using namespace std;
 
struct Struct{
    int data;
};
 
//добавление в начало
void push(list<Struct> &_coll, Struct &op){
    _coll.push_front(op);
}
 
//удаление из начала
void pop(list<Struct> &_coll){
    _coll.pop_front();
}
 
//редактирование
void edit(list<Struct> &_coll, int data_f){
    list<Struct>::value_type value;
    value = *find_if(_coll.begin(), _coll.end(), [data_f](Struct const& n){
        return n.data == data_f;});
 
    //do something
}
 
void print(Struct &op){
    cout << op.data << endl;
}
 
//вывод
void show(list<Struct> &_coll){
    for_each(_coll.begin(), _coll.end(), print);
}
 
int main() 
{ 
    list<Struct> coll;
 
    Struct op1, op2;
    op1.data = 1;
    op2.data = 2;
 
    push(coll, op1);
    push(coll, op2);
 
    show(coll);
 
    edit(coll, 1);
 
    cout << "\n\n";
    return 0; 
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 13:52
Привет! Вот еще темы с ответами:

Есть записная книжка "filestream" где есть данные людей. Надо добавить данные через map container - C++
Как добавить map в filestream и желательно примеры с файлстримами ali19158, пожалуйста, прочитайте правила форума и постарайтесь...

Создать список из целых чисел. После каждого элемента, равного "х" вставить элемент, равный "у" - C++
Задача со стеком. Создать список из целых чисел. После каждого элемента,равного х вставить элемент,равный у. какое условие нужно поменять...

Обработка пользовательского класса "Односвязный линейный список" - C++
Доброго времени суток. Хочу написать программу для обработки односвязного линейного списка (ОЛС) которая заключается в изменении начального...

Реализовать структуру данных "Линейный список" - C++
Всем привет. Не получается написать программу к следующему заданию. На словах я понимаю, как это выполнить, но структурами раньше не...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
22.04.2013, 13:52
Ответ Создать тему
Опции темы

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