Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 3

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

17.04.2013, 10:03. Показов 5273. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2013, 10:03
Ответы с готовыми решениями:

Создать приложение «Записная книжка»
помогите пожалуйста создать на паскале приложение «Записная книжка». Программа должна обеспечивать ввод и корректировку информации, а по...

Записная книжка
Здравствуйте Требовалось написать программу &quot;записная книжка&quot;,используя односвязный список.Почти сделал за исключением одного - в файл...

Записная книжка
Добрый день. Иммется подобие записной книжки с фамилиями и номерами телефонов. Изначальная задача была в поиске номера через ввод фамилии в...

4
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
17.04.2013, 17:07
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 3
19.04.2013, 05:29  [ТС]
yoghurt92, если не вводить данные человеке через клавиатуру, а считывать с файла, как это будет выглядеть?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
19.04.2013, 08:30
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
22.04.2013, 13:52
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2013, 13:52
Помогаю со студенческими работами здесь

Записная книжка
Напишите программу «Записная книжка» с графическим пользовательским интерфейсом на PyQT, используя необходимые виджеты. Пользователь...

Записная книжка
Привет Друзья. Прошу помочь с написанием записной книжки в Visual studio (язык С) c функцией просмотра удаления и редактирования...

Записная книжка
Здравствуйте, форумчане! Подруга попросила помочь с написанием проги в делфи, не смог отказать) Тем более, что все уже описано здесь ...

Записная книжка
уже как 2 недели мучаюсь с этим проектом, практически везде ошибки. я делаю записную книжку по этой работе ...

Записная книжка
Подскажите как сделать так что бы я записывал допустим имя в Edit подробности в memo и фотку в image нажимал на кнопку создать и это все...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru