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

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

Войти
Регистрация
Восстановить пароль
 
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
#1

Помогите организовать односвязный список! - C++

18.03.2012, 15:55. Просмотров 413. Ответов 5
Метки нет (Все метки)

Ребят, помогите пожалуйста организовать односвязный список и вывести его на экран... Вот пример той программы,которую я пытаюсь написать, только вот ничего у меня не получается с организацией и выводом...
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
#include<iostream> 
#include<conio.h> 
#include<string.h>
#include<stdlib.h> 
#include<stdio.h>
#include<windows.h>
using namespace std;
struct sportsmen
{
    char famili[30],name[30],vidsp[50]; //фамилия,имя,вид спорта спортсмена
    int rez; //его результат
    sportsmen *next; 
};
int main()
{
    SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
sportsmen *head =0; //хранит начало списка
sportsmen *current; //по идее должен хранить адрес следующего элемента списка
int k,i;
cout<<"Введите кол-во спортсменов, которое вы хотите записать в список: ";
 cin>>k;
sportsmen *s;
s=new sportsmen[k];
cout<<"Вам предстоит заполнить данные о "<<k<<" спортсменах!!!\n";
for(i=0;i<k;i++)
{
    cin.sync();//очистки буфера потока ввода
    cout<<"Введите фамилию "<<i+1<<"-ого спортсмена: ";
    cin.getline(s[i].famili,29);
    cout<<"Введите имя "<<i+1<<"-ого спортсмена: ";
    cin.getline(s[i].name,29);
    cout<<"Укажите вид спорта "<<i+1<<"-ого спортсмена: ";
    cin.getline(s[i].vidsp,49);
    cout<<"Укажите место, занятое "<<i+1<<"-ым спортсменом: ";
    cin>>s[i].rez;
    system("cls");
    if(i==0)
    {
        head=new sportsmen[i];
        current=head;   
    }
    else
    {
        current[i].next=new sportsmen[i];
        current=current->next;      
    }
    current[i]=s[i];
    current[i].next=0;
}
current=head;
while(current!=0)
{cout<<current;
current=current->next;
}
getch();
delete []s;
}
Кто может, подскажите, ПОЖАЛУЙСТА!!! ЗА РАНЕЕ - БУДУ ПРЕМНОГО БЛАГОДАРЕН.... РЕБЯТ, ПОМОГИТЕ...

Добавлено через 40 минут
Ну что, никто не поможет???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 15:55     Помогите организовать односвязный список!
Посмотрите здесь:

Односвязный список - C++
Задание: Сформировать список вещественных чисел и вычислить сумму. На 32 строке где значения, выдает ошибку. Почему? Сумму этих...

Односвязный список - C++
Пришло время понять и разобраться со списками. Кто-то может посоветовать нормальные статьи в интернете? Сам уже искал, в большинстве...

Односвязный список - C++
Всем привет. Помогите разобраться с односвязным списком. Вот собственно и вопросы: 1) Если я правильно понял то список это чтото вроде...

Односвязный список - C++
Нужно составить код для односвязного списка (формирование и вывод). При этом нельзя использовать классы(( Вроде код правильный, но...

односвязный список - C++
Доброго времени суток! У меня такой вопрос: нужно разработать класс, реализующий линейный односвязный список. Методы класса: добавление...

Односвязный список - C++
Здравствуйте! Кто может разъяснить как вставить в узел заданного места значение.. 1. Нужно выделить память Elem *Ins = new Elem ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 16:03     Помогите организовать односвязный список! #2
sniperni, дело в том, что вы создаете не связанный список, а помесь динамического массива и структуры для организации связанного списка.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.03.2012, 16:37     Помогите организовать односвязный список! #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
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
#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdlib.h> 
#include<stdio.h>
#include<windows.h>
 
using namespace std;
 
struct sportsmen
{
  char famili[30];
  char name[30];
  char vidsp[50];
  int rez;
 
  sportsmen()
    : rez(0)
  {
    famili[0] = 0;
    name[0] = 0;
    vidsp[0] = 0;
  }
};
 
ostream& operator << (ostream& out, const sportsmen& men)
{
  out << men.famili << ", " << men.name << ", " << men.vidsp << ", " << men.rez;
  return out;
}
 
struct listnode
{
  sportsmen value;
  listnode* nextNode;
 
  listnode()
    : nextNode(0)
  {
  }
};
 
void InputSportsmen(sportsmen& men)
{
  cin.sync();
  cout << "Введите фамилию: ";
  cin.getline(men.famili, 29);
  cout << "Введите имя: ";
  cin.getline(men.name, 29);
  cout << "Укажите вид спорта: ";
  cin.getline(men.vidsp,49);
  cout << "Укажите занятое место: ";
  cin >> men.rez;
  system("cls");
}
 
listnode* CreateList()
{
  int numElements = 0;
  cout << "Введите кол-во спортсменов, которое вы хотите записать в список: ";
  cin >> numElements;
 
  cout<<"Вам предстоит заполнить данные о " << numElements << " спортсменах!!!\n";
  // assert numElements > 0
 
  listnode* head = new listnode();
  listnode* tie = head;
  cout << "Ввод данных " << 1 << "-ого спортсмена\n";
  InputSportsmen(tie->value);
 
  for (int i = 1; i < numElements; ++i)
  {
    listnode* node = new listnode();
    tie->nextNode = node;
    tie = node;
 
    cout << "Ввод данных " << i + 1 << "-ого спортсмена\n";
    InputSportsmen(tie->value);
  }
 
  return head;
}
 
void PrintList(listnode& head)
{
  for (listnode* node = &head; node != 0; node = node->nextNode)
    cout << node->value << std::endl;
}
 
void DestroyList(listnode*& head)
{
  for (listnode* node = head; node != 0;)
  {
    listnode* next = node->nextNode;
    delete node;
    node = next;
  }
  head = 0;
}
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  listnode* head = CreateList();
  PrintList(*head);
  DestroyList(head);
  getch();
  return 0;
}
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 16:40     Помогите организовать односвязный список! #4
DU, для такой маленькой задачки это вовсе не обязательно.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.03.2012, 16:44     Помогите организовать односвязный список! #5
это всегда нужно делать. код, в котором все свалено в одной функции сложнее понимать, находить в нем ошибки, исправлять и в конечном итоге сложнее написать корректную программу. В любой даже самой простой программе всегда есть место для разбиения на подпрограммки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2012, 16:53     Помогите организовать односвязный список!
Еще ссылки по теме:

Односвязный список - C++
Дан список целых чисел , удалить все положительные. struct my_list{ int num; struct my_list*Next; } int x; my_list...

Односвязный список - C++
Дано два списка с целыми числами. Создать новый список в котором размещены элементы какие одновременно присутствуют в первых двух списках. ...

Односвязный список - C++
Смотрю уроки по односвязному списку. У автора в 37 строке кода происходит инициализация структуры. Но как программа определит, что значения...

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

Односвязный список - C++
Начал читать про односвязные списки и никак не пойму, зачем мы выделяем память под первый элемент списка? Мы сначала определяем указатель...

Односвязный Список - C++
Как реализовать список в этом коде, необязательно писать код буду благодарен за совет или подсказку! #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 16:53     Помогите организовать односвязный список! #6
DU, есть, конечно, но не нужно забывать, что чем больше вызовов, тем меньше скорость выполнения (конечно, это заметно только на больших вычислениях), а здесь использование функций не оправданно, тем что нужно бегать глазами по всему коду, хотя можно просто пройтись последовательно. Хотя было бы ещё красивее разделить на include-ы
Yandex
Объявления
18.03.2012, 16:53     Помогите организовать односвязный список!
Ответ Создать тему
Опции темы

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