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

Ввод и вывод односвязного списка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.97
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 15:52     Ввод и вывод односвязного списка #1
Немогу ввести и вывести односвязный список.Ввожу список нормально, а выводит очень маленькие отрицательные числа, причём все одинаковые.Вот код:
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <math.h>
using namespace std;
   struct elsp
        { int id;
          struct elsp *sled;
        };
   int _tmain(int argc, _TCHAR* argv[])
{ int n,vvod;
   struct elsp *tec;
   unsigned i;
   tec=NULL;
cout<<"Vvedite kol-vo elementov spiska";
cin>>n;
tec=((struct elsp*)malloc(sizeof(struct elsp)));
for(i=1;i<=n;i++)
{cin>>(tec->id);
 tec->sled=((struct elsp*)malloc(sizeof(struct elsp)));
 tec=tec->sled;
    }
tec->sled=tec;
for(i=1;i<=n;i++)
    {cout<<(tec->id);
     tec=(tec->sled);
    }
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
11.05.2012, 19:33     Ввод и вывод односвязного списка #2
все одинаковые выводит т.к. ты крутишься на месте, у те бя же написано
C++
1
tec->sled=tec;
а бредовые числа потому что ты что-то не то написал в создании списка
я бы так сделал, чтобы можно было в будующем еще обращаться к списку(а лучше в функциях это все написать).
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
void main()
{ 
    int n;
    struct elsp *tec=NULL,*start=NULL,*last=NULL;
    unsigned i;
    tec=NULL;
    cout<<"Vvedite kol-vo elementov spiska ";
    cin>>n;
 
    for(i=1;i<=n;i++)
    {
        tec = new struct elsp;
        cin>>tec->id;
        if(start==NULL) //если вводиться первый элемент запомнить его в start 
        {
            start=tec;
            last=tec;
        }
        last->sled=tec;//в последнем элементе устанавливаю ссылку на новый
        last=tec;//новый элемент делаю последним
        last->sled=NULL;//обнуляю ссылку в новом элементе
    }
 
 
    tec=start;
 
 
    for(i=1;i<=n;i++)
    {
        cout<<(tec->id);
        tec=(tec->sled);
    }
    getch();
 
}

ну или если вы хотите свой код исправить, чтобы он просто работал то:
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
void main()
{ 
    int n;
    struct elsp *tec=NULL,*start=NULL;
    unsigned i;
    tec=NULL;
    cout<<"Vvedite kol-vo elementov spiska ";
    cin>>n;
    tec=((struct elsp*)malloc(sizeof(struct elsp)));
    start=tec;//запомінаю начало списка
    for(i=1;i<=n;i++)
    {
    cin>>(tec->id);
    tec->sled=((struct elsp*)malloc(sizeof(struct elsp)));
    tec=tec->sled;
    
    }
 
    for(i=1;i<=n;i++)
    {
        cout<<(start->id);
        start=(start->sled);
    }
    getch();
 
}
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 19:43  [ТС]     Ввод и вывод односвязного списка #3
Тоесть, если я использую второй вариант кода, то я не смогу просто опустить в функцию начало списка и там его обрабатывать ?
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
11.05.2012, 19:53     Ввод и вывод односвязного списка #4
все, понял. числа бредовые были т.к. вы создавали лишний элемент tec который не инициализировали, соответственно в id был мусор, а т.к. далее вы на нем зацикливались, то выводило вам одно и то же число

Добавлено через 2 минуты
там тогда нужно будет добавить между циклами
C++
1
tec=start;
і можно будет использовать его.

Добавлено через 4 минуты
ну и во втором цикле вместо start пісать tec
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 20:04  [ТС]     Ввод и вывод односвязного списка #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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <math.h>
using namespace std;
   struct elsp
        { int id;
          struct elsp *sled;
        };
 //int summa(int start)
      //{
      //}  
  int _tmain(int argc, _TCHAR* argv[])
{ int n,vvod;
   struct elsp *tec,*start;
   unsigned i;
   tec=NULL;
   start=0;
cout<<"Vvedite kol-vo elementov pervogo spiska";
cin>>n;
tec=((struct elsp*)malloc(sizeof(struct elsp)));
start=tec;
for(i=1;i<=n;i++)
{cin>>(tec->id);
 tec->sled=((struct elsp*)malloc(sizeof(struct elsp)));
 tec=tec->sled;
    }
tec=start;
for(i=1;i<=n;i++)
    {cout<<(tec->id);
     start=(tec->sled);
    }
    getch();
    return 0;
}
если я сделаю вот так, как вы сказали, то перестаёт работать...
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
11.05.2012, 20:06     Ввод и вывод односвязного списка #6
33 строка там тоже меняешь на tec
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 20:10  [ТС]     Ввод и вывод односвязного списка #7
А теперь для использовании в функции достаточно просто опустить туда указатель на начало, тоесть *start.... ???
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
11.05.2012, 20:11     Ввод и вывод односвязного списка #8
да, но и заполнение было б неплохо засунуть в функцию, так удобнее
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 20:13  [ТС]     Ввод и вывод односвязного списка #9
В этом и весь прикол, я когда преподавателю сдал это задание, он сказал что заполнение надо делать вне функции, так как это плохой стиль программирования и заставил переделать, вот тут у меня начались проблемы...
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
11.05.2012, 20:23     Ввод и вывод односвязного списка #10
хммм... ну я особо про стили незнаю, сам вчера закончил курсовую по двусвязным спискам завтра спрошу препода

Добавлено через 4 минуты
если это окажеться правдой прийдеться менять код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 21:38     Ввод и вывод односвязного списка
Еще ссылки по теме:

Вывод и ввод двумерного списка записей C++
Удаление элементов из односвязного списка списка C++
C++ Вывод односвязного списка на C

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

Или воспользуйтесь поиском по форуму:
timofei580
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 23
11.05.2012, 21:38  [ТС]     Ввод и вывод односвязного списка #11
помойму недостаточно просто опустить туда start.... нужно что-то еще....ведб вот так просто работать она не будет....сдесь я попытался просто получить сумму элементов списка....
C++
1
2
3
4
5
6
7
8
9
int summa(struct elsp *start, int n)
      {int summa,i;
       summa=0;
       for(i=1;i<=n;i++)
           {summa=(start->id)+summa;
            
           }
           return(summa);
      }
Добавлено через 54 минуты
А всё сделал спасибо....
Yandex
Объявления
11.05.2012, 21:38     Ввод и вывод односвязного списка
Ответ Создать тему
Опции темы

Текущее время: 09:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru