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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

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

07.12.2012, 02:34. Просмотров 1440. Ответов 3
Метки нет (Все метки)

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

Добавлено через 22 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Item {
    int liczba;
    struct Item* next;
};
 
void slstore(struct Item *i,
             struct Item **last)
{
  if(!*last) *last = i; 
  else (*last)->next = i;
  i->next = NULL;
  *last = i;
}
Или, вот например, создал структуру в которую буду записывать числа. И дальше нашел функцию которая должна дописывать числа в конец списка. Но мог бы кто-то пошагово объяснить как она работает и как мне передавать в функцию по началу указатель на конец списка, если его еще не существует?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 02:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный список (C++):

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

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

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке - C++
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке.

Односвязный список - C++
Доброй ночи! Вроде все написала правильно, прога должна читать из файла KR8+.txt и записывать один элемент в KR8.txt в конец списка... но...

Односвязный список - C++
Доброго времени суток. Помогите, пожалуйста, решить задачу: Реализовать односвязный список, с возможностью его разворота в обратную...

Односвязный список - C++
Всем привет, Дaн oднocвязный cпиcoк, элeмeнт этoгo cпиcка coдержит маccив из 10 цeлых пeрeмeнных. Эти пeрeмeнные нужнo xранит в...

3
RayBor
3 / 3 / 0
Регистрация: 07.12.2012
Сообщений: 28
07.12.2012, 03:41 #2
C
1
2
3
4
5
6
7
8
9
void slstore(struct Item *i, struct Item **last)
{
    if(!*last)         //проверят поинтер который передали, если 0 значит список пуст
        *last = i;    //строит новый (первый) элемент из переданного элемент 
    else
        (*last)->next = i; //если не 0, то добавляет переданный элемент
    i->next = NULL;       //устанавливает поле "следующий" добавленного элемента в 0
    *last = i;               //теперь указатель указывает на последний (добавленный) элемент
}
эта функция добавляет голову, если список пуст и в конец если ей передавать посл. элемент. но для того что бы найти последний нужен проход по списку.
1
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
07.12.2012, 04:50 #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
#include <iostream>
#include <cstdint>
#include <iomanip>
 
 
namespace mystd
{
 
    const uint32_t def_size = 1024; //default memory container
 
    template<typename T>
    class shit
    {
    public:
 
        shit() : size(def_size * sizeof(node)), pos(0)
        {
            mem_start_ptr = new node[ size ];
            mem_now_ptr = mem_start_ptr;
        }
 
        ~shit()
        {
            delete [] mem_start_ptr;
        }
 
        int push_back(T __data)
        {
            if (!pos)
            {
                ++pos;
                mem_start_ptr->data = __data;
                mem_start_ptr->next = (node*) NULL;
 
                return 0;
            }
            else if (pos < size - 1)
            {
                ++pos;
                mem_now_ptr->next = mem_now_ptr + 1;
                mem_now_ptr = mem_now_ptr->next;
                mem_now_ptr->data = __data;
                mem_now_ptr->next = (node*) NULL;
 
                return 0;
            }
            else
                return -1;
        }
 
        void dump()
        {
            node *tmp = mem_start_ptr;
 
            while (tmp)
            {
                std::cout << std::setw(3) << tmp->data;
                tmp = tmp->next;
            }
            std::cout << '\n';
        }
 
    private:
        uint32_t size;
        uint32_t pos;
        struct node
        {
            T data;
            node *next;
        };
        node *mem_start_ptr;
        node *mem_now_ptr;
    };
}
 
 
int main()
{
    mystd::shit<int> obj;
 
    for (int i = 0; i < 10; ++i)
        if (obj.push_back ( i ) == -1)
            goto out;
 
    obj.dump ();
out:
 
    return 0;
}
1
_Alexander
12 / 12 / 1
Регистрация: 05.11.2012
Сообщений: 49
10.12.2012, 09:59 #4
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
130
131
132
133
134
135
136
137
#include <iostream.h>
#include "List.h"
 
// Элемент данных
struct Element
{
   // Данные
   char data;
   // Адрес следующего элемента списка
   Element * Next;
};
 
// Односвязный список
class List
{
   // Адрес головного элемента списка
   Element * Head;
   // Количество элементов списка
   int Count;
 
public:
   // Конструктор
   List();
   // Деструктор
   ~List();
    
   // Добавление элемента в список
   // (Новый элемент становится головным)
   void Add(char data);
    
   // Удаление элемента списка
   // (Удаляется головной элемент)
   void Del();
   // Удаление всего списка
   void DelAll();
    
   // Распечатка содержимого списка
   // (Распечатка начинается с головного элемента)
   void Print();
    
   // Получение количества элементов, находящихся в списке
   int GetCount();
};
List::List()
{
   // Изначально список пуст
   Head = NULL;
   Count = 0;
}
 
List::~List()
{
   // Вызов функции удаления
   DelAll();
}
 
int List::GetCount()
{
   // Возвращаем количество элементов
   return Count;
}
 
void List::Add(char data)
{
   // создание нового элемента
   Element * temp = new Element;
 
   // заполнение данными
   temp->data = data;
   // следующий элемент - головной элемент списка
   temp->Next = Head;
 
   // новый элемент становится головным элементом списка
   Head = temp;
 
   Count++;
}
 
void List::Del()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // перебрасываем голову на следующий элемент
   Head = Head->Next;
   // удаляем бывший головной элемент
   delete temp;
 
   Count--;
}
 
void List::DelAll()
{
   // Пока еще есть элементы
   while(Head != 0)
      // Удаляем элементы по одному
      Del();
}
 
void List::Print()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // Пока еще есть элементы
   while(temp != 0)
   {
      // Выводим данные
      cout << temp->data; // << " ";
      // Переходим на следующий элемент
      temp = temp->Next;
   }
 
   cout << endl;
}
 
void main()
{
   // Создаем объект класса List
   List lst;
 
   // Тестовая строка
   char s[] = "Hello, World !!!\n";
   // Выводим строку
   cout << s << endl;
   // Определяем длину строки
   int len = strlen(s);
   // Загоняем строку в список
   for(int i = 0; i < len; i++)
      lst.Add(s[i]);
   // Распечатываем содержимое списка
   lst.Print();
   // Удаляем три элемента списка
   lst.Del();
   lst.Del();
   lst.Del();
   // Распечатываем содержимое списка
   lst.Print();
}
вот еще имхо наглядная реализация односвязного списка
1
10.12.2012, 09:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 09:59
Привет! Вот еще темы с ответами:

Односвязный список - C++
Помогите пожалуйста написать функцию поиска числа заданного пользователем в односвязном списке

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

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

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


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

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

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