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

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

Войти
Регистрация
Восстановить пароль
 
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
#1

Односвязные списки: как работают? - C++

27.05.2013, 12:49. Просмотров 405. Ответов 7
Метки нет (Все метки)

Здрасте всем!
Есть такой вот односвязный список, объясните пожалуйста, как будет выглядеть функция добавления записи в конец такого списка, сколько не пытался, никак вникнуть не могу. Везде представлены примеры только с одной переменной.
C++
1
2
3
4
5
6
7
8
9
10
struct base {
   int id;
   string fio;
   int age;
   string prof;
   string party;
   int num;
   bool sud;
   struct base* next;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 12:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Односвязные списки: как работают? (C++):

Односвязные списки - C++
Задача: добавить в список 1 узлы, содержащие слова в списке 2, не совпадающие со словами списка 1(линейный список 1 из слов хранится в...

Односвязные списки - C++
Помогите, никак не могу понять что делать.. Написал код самого линейного списка, а дальше завис.

Односвязные списки С++ - C++
Помогите пожалуйста с заданием: Необходимо создать список(из целых чисел) добавлением элемента в конец... Я написала программу,только...

Односвязные списки - C++
Вечер добрый) Сформировать список символов, оканчивающийся точкой. Заменить в списке символ “A” на символ “0”. Сама задача есть и...

Односвязные списки - C++
помогите написать функцию которая меняет местами два элемента списка, заданные значением информационной части. Node *peremena(Node...

Односвязные списки - C++
Есть программа которая должна выводить координаты точки (x.y.z) Ввод должен выполняться путем считывания из файла, Сделал все кроме...

7
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
27.05.2013, 12:53 #2
Цитата Сообщение от Jazzis Посмотреть сообщение
Везде представлены примеры только с одной переменной.
Потому что не надо мешать всё в кучу. Заведите ещё одну структуру:
C++
1
2
3
4
5
6
7
8
9
10
struct Person
{
   int id;
   string fio;
   int age;
   string prof;
   string party;
   int num;
   bool sud;
};
И будет у Вас в итоге с одной переменной:
C++
1
2
3
4
struct base {
   Person person;
   struct base* next;
};
0
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
27.05.2013, 14:21  [ТС] #3
И как в таком случае будет выглядеть функция добавления?
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
27.05.2013, 14:26 #4
Цитата Сообщение от Jazzis Посмотреть сообщение
И как в таком случае будет выглядеть функция добавления?
Вы же говорили что таких примеров полно
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,777
27.05.2013, 14:32 #5
C++
1
2
3
4
5
6
7
8
9
void Add(base *list, Person p)
{
    base *cur = list;
    while(curr->next != NULL)
         curr = curr->next;
    curr->next = new base;
    curr = curr->next;
    curr.person = p;
}
лол, форум понимает person как-то по-другому)
0
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
30.05.2013, 23:08  [ТС] #6
Я все равно не понимаю, получается что в 'p' придется передать кучу переменных сразу? Т.е.
C++
1
curr.person = id,fio,age,prof,party,num,sud;
Но он же будет ругаться, наскок я понимаю. Вы мне показали как добавить, как если бы я вводил в 'p' просто что-нибудь единственное. А как ввести что-нибудь множественное?
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
30.05.2013, 23:34 #7
Jazzis, почитайте про конструкторы. А вообще устанавливать поля можно и по очереди.
C++
1
2
3
curr.person.id = id;
curr.person.fio = fio; 
// ...
0
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
03.06.2013, 14:32  [ТС] #8
pizurok, а почему в curr->next не записывается NULL, в последнем ж элементе нужно чтобы next равнялось NULL? Просто объясните, может я чего-то не знаю.

Добавлено через 1 час 39 минут
Вообщем написал функцию для добавления записи в конец, все работает без ошибок, но когда просматриваю список функцией для просмотра, пишет, что он EMPTY. Вот весь код:
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
struct Person {
    int id; 
    int age;
    int number;
    char* fio;
    char* prof;
    char* party;
    bool sud;
};
 
struct Base {
    Person person;
    struct Base *next;
} *head;
 
Base* append(void) {
   struct Base *curr;
   curr = (struct Base *)malloc(sizeof(struct Base));
   while (curr->next != NULL)
      curr = curr->next;
   curr->next = new Base;
   curr = curr->next;
   //curr->data = x;
   //curr->next = NULL;
   return curr;
}
 
void display(struct Base *curr) {
   int i = 0;
   curr = head;
   //curr = (struct base *)malloc(sizeof(struct base));
   if (curr == NULL) {
      cout<<"EMPTY"<<endl;
      return;
   }
   while (curr->next != NULL) {
      printf("%d %s %d", curr->person.id,curr->person.fio,int(curr->person.sud));
      curr = curr->next;
      i += 1;
   }
   printf("\nTotal lines: %d \n", i);
}
 
int main()
{
    struct Base * db = NULL;
    int op1,op2;
    int num1(0),num2(0); // number of lines
    do {
        cout << "\n[1] New line\n[2] View\n[0] Exit\n>> ";
        cin >> op1;
        switch (op1) {
            case 1: {
                int i,k,x;
                char text[150];
                bool lgc;
                cout << "Number of lines: ";
                cin >> k;
                for (i=num1; i<k+num1 ;i++) {
                    db = append();
                    cout << "\nNumber of line: " << i+1 << endl;
                    db->person.id = i+1;
 
                    cout << "Fullname: ";
                    cin >> text;
                    db->person.fio = (char*)malloc(strlen(text)+1);
                    strcpy(db->person.fio, text);
 
                    cout << "Age: ";
                    cin >> x;
                    db->person.age = x;
 
                    cout << "Job: ";
                    cin >> text;
                    db->person.prof = (char*)malloc(strlen(text)+1);
                    strcpy(db->person.prof, text);
 
                    cout << "Party: ";
                    cin >> text;
                    db->person.party = (char*)malloc(strlen(text)+1);
                    strcpy(db->person.party, text);
 
                    cout << "Precinct number: ";
                    cin >> x;
                    db->person.number = x;
 
                    cout << "Record: ";
                    cin >> lgc;
                    db->person.sud = lgc;
                    db->next = NULL;
                }
                num1 = i;
                break;
            };
            case 2: 
                display(db);
                break;
            case 0: break;
            default: printf("Invalid command");
        }
    } while (op1 != 0);
}
Вроде же добавляются, или нет?
0
03.06.2013, 14:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 14:32
Привет! Вот еще темы с ответами:

Односвязные списки - C++
Всем доброго времени суток. Мне нужно реализовать вот эти операторы в односвязном списке: void gotoTail() void addToTail(Node* node) ...

односвязные списки С++ - C++
Дана последовательность символов s1 , s2 , . . . , sn ( n &gt;= 2 и заранее неизвестно). Получить те символы, принадлежащие...

Односвязные списки - C++
Вот такая задачка Дан текстовый файл. Группы символов, разделенные пробелами, будем называть словами. В файле оставить только по...

односвязные списки - C++
Помогите пожалуста в проге нужно в методе класа List нужно вставить елементы с первого списка в второй после последнего вхождение...


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

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

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