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

Односвязные списки С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
24.10.2011, 15:32     Односвязные списки С++ #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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include<iostream>
#include<cmath>
 
using namespace std;
struct list
{
int inf;
list* next;
};
 
list* sp_create();
void scan(list*L);
 
int _tmain(int argc, _TCHAR* argv[])
{
    list* F;
    F=sp_create();
    scan(F);
    system("Pause");
    return 0;
}
 
list* sp_create()
{
    list* L,*p;
    int n;
    cout<<"size list->";
    cin>>n;
    L=0;
    for(int i=0;i<n;i++)
    {
        p=new list;
    cout<<"list item->";
    cin>>p->inf;
    p->next=L;
    L=p;
    }
  return L;
}
 
void scan(list*L)
{ for (; L; L=L->next)
    cout <<L->inf << ' ';
  cout << '\n';
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 15:32     Односвязные списки С++
Посмотрите здесь:

односвязные списки C++
C++ Односвязные списки
Односвязные списки C++
Односвязные списки C++
C++ Односвязные линейные списки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gogajeti
4 / 4 / 0
Регистрация: 19.10.2011
Сообщений: 20
24.10.2011, 15:46     Односвязные списки С++ #2
так Вы действительно добавляете в начало списка
Цитата Сообщение от Кристо Посмотреть сообщение
C++
1
2
    p->next=L;
    L=p;
наверное можно сделать примерно так:
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
list* sp_create()
{
        list* L,*p, *last;
        int n;
        cout<<"size list->";
        cin>>n;
        if(n == 0) return NULL; // список не должен быть пустым
 
        // добавим первый элемент
        L=new list;
        cin >> L->inf
        L->next = NULL;
 
        last = L;
        for(int i=1;i<n;i++)
        {
                p=new list;
        cout<<"list item->";
        cin>>p->inf;
        p->inf = NULL;
        last->next = p;
        last=p;
        }
  return L;
}
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.10.2011, 15:58     Односвязные списки С++ #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
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct list
{
    int inf;
    list* next;
 
    list()
    {
        next = NULL;
    }
};
 
list* sp_create();
void scan(list* L);
 
int main()
{
    list* F;
    F = sp_create();
    scan(F);
    system("Pause");
    return 0;
}
 
list* sp_create()
{
    list *start,*new_link,*end;
    int n;
    cout << "size list->\n";
    cin >> n;
    end = start = NULL;
    for (int i = 0; i < n; i++)
    {
        new_link = new list();
        cout << "list item->\n";
        cin >> new_link->inf;
        if (!i)
            start = end = new_link;
        else
        {
            end->next = new_link;
            end = end->next;
        }
    }
    return start;
}
 
void scan(list* L)
{
    list* p;
    cout << "List:\n";
    while (L)
    {
        cout << L->inf << ' ';
        p = L;
        L = L->next;
        delete p;
    }
    cout << '\n';
}
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
24.10.2011, 16:14  [ТС]     Односвязные списки С++ #4
я проверила,не работает.....

Добавлено через 10 минут
Спасибо,работает.......буду разбираться......
gogajeti
4 / 4 / 0
Регистрация: 19.10.2011
Сообщений: 20
24.10.2011, 16:16     Односвязные списки С++ #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
#include<iostream>
 
using namespace std;
 
struct list
{
    int inf;
    list* next;
};
 
list* sp_create();
void scan(list*L);
 
int main(int argc, char* argv[])
{
    list* F;
    F=sp_create();
    scan(F);
    //system("Pause");
    return 0;
}
 
list* sp_create()
{
    list* L,*p, *last;
    int n;
    cout<<"size list->";
    cin>>n;
    if(n == 0) return NULL; // список не должен быть пустым
 
        // добавим первый элемент
        L=new list;
    cout<<"list item->";
    cin >> L->inf;
    L->next = NULL;
    
    last = L;
    for(int i=1;i<n;i++)
    {
        p=new list;
        cout<<"list item->";
        cin>>p->inf;
        p->next = NULL;
        last->next = p;
        last=p;
    }
    return L;
}
 
void scan(list*L)
{ for (; L; L=L->next)
cout <<L->inf << ' ';
    cout << '\n';
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.10.2011, 16:20     Односвязные списки С++ #6
Кристо, вот Вам ещё вариант. Проверял - работает
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
#include <iostream>
    
class List {
    class Node {
        int value;
        Node * next;
    public:
        Node(int val) : value(val), next(0) {}
        int Value() const { return value; }
        void Next(Node * n) { next = n; }
        Node * Next() const { return next; }
    };
    
    Node * first;
    Node * last;
    
    List(const List &);
    List & operator = (const List &);
public:
    List() : first(0), last(0) {}
    void Add(int val){
        Node * n = new Node(val);
        if ( ! first )
            first = n;
        else
            last->Next(n);
        last = n;
    }
    void Dump(std::ostream & ost){
        for ( Node * n = first; n; n = n->Next() )
            ost << n->Value() << ' ';
        ost << std::endl;
    }
    ~List(){
        while ( first ){
            last = first->Next();
            delete first;
            first = last;
        }
    }
};
 
int main(){
    List list;
    
    for ( int i = 0; i < 10; ++i )
        list.Add(i + 1);
    list.Dump(std::cout);
    
    return 0;
}
Yandex
Объявления
24.10.2011, 16:20     Односвязные списки С++
Ответ Создать тему
Опции темы

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