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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.84
fireresist
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 14
10.12.2010, 03:42     Односвязный список #1
Доброго времени суток. Помогите, пожалуйста, решить задачу:
Реализовать односвязный список, с возможностью его разворота в обратную сторону(первый стал последним, а последний первым).

никак не разберусь со списками =\ вообще, беда..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2010, 03:42     Односвязный список
Посмотрите здесь:

Односвязный список C++
Односвязный список C++
Односвязный список C++
C++ Односвязный список
Односвязный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.12.2010, 04:47     Односвязный список #2
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
class MyList {
private:
    int nodes; // количество узлов.
    struct node {
        node *next;
        int data;
        node(int, node *);
    };
    node *head;   // первый элемент в списке
    node *tail;      // последний элемент в списке
public:
    MyList();
    ~MyList();
    bool empty();
    void push(int); // записать в список
    void clear();    // удалить все элементы списка
    void reverse(); // реверсировать последовательность элементов
    void delete(int); // удалить элемент по его содержимому
};
void push(int);
void MyList::reverse()
{
    node *tmp = head;
    head = tail;
    tail = tmp;
}
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 11:54     Односвязный список #3
Aye Aye, от того, что ты поменяешь местами значения указателей head и tail, ОДНОСВЯЗНЫЙ список не развернется!
fireresist
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 14
10.12.2010, 13:54  [ТС]     Односвязный список #4
А можно на С это как-нибудь?
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.12.2010, 17:57     Односвязный список #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
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
120
121
122
123
124
125
126
127
128
129
#include <iostream>
using namespace std;
///////////////////////////////////////////
template <class T>
struct Node
{
    Node* next;
    T data;
};
///////////////////////////////////////////
template <class T>
class LinkedList{
public:
    LinkedList():head(0), tail(0){};
    ~LinkedList();
 
    void push_back(T val);
    void push_front(T val);
    void reverse();
    void display() const;
private:
    Node<T> * head; 
    Node<T> * tail; 
};
//---------------------------------------//
template <class T>
void LinkedList<T>::push_front(T val)
{
    Node<T> * newNode = new Node<T>;
 
    newNode->data = val;
    newNode->next = head;
 
    head = newNode;
 
    if(tail==0)
        tail = head;
}
//---------------------------------------//
template <class T>
void LinkedList<T>::push_back(T val)
{
    Node<T> * newNode = new Node<T>;
 
    newNode->data = val;
    newNode->next = 0;
    
    if(tail==0)
    {
        head = tail = newNode;
        return;
    }
 
    tail->next = newNode;
    tail = newNode;
}
//---------------------------------------//
template <class T>
LinkedList<T>::~LinkedList()
{
    Node<T> * tmp;
    while(head)
    {
        tmp = head;
        head = head->next;
        delete tmp;
    }
}
//---------------------------------------//
template <class T>
void LinkedList<T>::display() const
{
    Node<T> * current = head;
 
    while(current)
    {
        cout<<current->data<<' ';
        current = current->next;
    }
}
//---------------------------------------//
template <class T>
void LinkedList<T>::reverse()
{
    if (head == 0)
        return;
 
    tail = head;
 
    Node<T> * current = head->next;
    Node<T> * right;
 
    while(current)
    {   
        right = current->next;
 
        current->next = head;
        head = current;
        current = right;
    }
 
    tail->next = 0;
}
///////////////////////////////////////////
int main()
{
    LinkedList<int> intList;
    
    intList.push_front(3);
    intList.push_front(2);
    intList.push_front(1);
 
    intList.push_back(4);
    intList.push_back(5);
    intList.push_back(6);
 
    cout << "Normal: ";
    intList.display();
 
    intList.reverse();
 
    cout << "\nReversed: ";
    intList.display();
 
    ///////////////////////////////////////////
    cout << endl;
    system("pause");
    return 0;
}
Особо до этого со списками не работал, поэтому приветствую всякого рода крититку.
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 18:55     Односвязный список #6
Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
3
4
5
#include <iostream>
using namespace std;
///////////////////////////////////////////
template <class T>
...
Это Си? О_о

Добавлено через 8 минут
Цитата Сообщение от dihlofos Посмотреть сообщение
приветствую всякого рода крититку.
Ну, я бы
C++
1
        tail->next = 0;
сделал сразу после
C++
1
        Node<T> * current = head->next;
а так съедобно.
dihlofos
11.12.2010, 06:30
  #7

Не по теме:

Цитата Сообщение от Напильнег Посмотреть сообщение
Это Си?
Да не, я не ставил целью именно на Си написать, просто заинтересовала тема

fireresist
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 14
11.12.2010, 10:29  [ТС]     Односвязный список #8
а можно это же на Си, плиз?
fireresist
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 14
12.12.2010, 16:26  [ТС]     Односвязный список #9
^up this
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2010, 20:26     Односвязный список
Еще ссылки по теме:

C++ Односвязный список
Односвязный список C++
Односвязный список C++

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

Или воспользуйтесь поиском по форуму:
fireresist
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 14
14.12.2010, 20:26  [ТС]     Односвязный список #10
товарищи, помогите, пожалуйста никак не разберусь, а вот-вот сдавать(
Yandex
Объявления
14.12.2010, 20:26     Односвязный список
Ответ Создать тему
Опции темы

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