С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

Одноправленный линейный список - C++

14.02.2012, 12:30. Просмотров 396. Ответов 4
Метки нет (Все метки)

Дайте идею пожалуйста
создать пользовательский тип данных который создает массив переменной длины с использованием одноправленного линейного списка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 12:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Одноправленный линейный список (C++):

Вставить в линейный список перед элементом с заданным значением другой линейный список - C++
Как можно вставить в линейный список перед элементом с заданным значением другой линейный список? Как один элемент вставлять, я знаю, а вот...

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

Линейный список - C++
Есть такая детская считалка: n детей стали в круг. Начиная отсчет от первого, убирают каждого k-го ребёнка, замыкая круг после каждого...

Линейный список - C++
Нужно написать курсовую по с++, не используя стандартных методов. Подскажите пожалуйста, с чего начать? Текст допомоги для деякої...

Линейный список - C++
Текст помощи организовано как линейный список. каждая компонента текста помощи содержит пояснение к этому термину. Составить программу...

Вывести линейный список - C++
Необходимо создать линейный список упорядоченный по фамилиям и вывести его на экран. Код вроде написал. но есть сомнения в правильности...

4
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
14.02.2012, 13:25 #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
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
#include <iostream>
 
template <class T>
class OneLinkedList {
 public:
  struct Node {
    Node() : next(this) {}
    Node(Node *after, const T &data_) : next(after->next), data(data_) {
      after->next = this;
    }
    Node *next;
    T data;
  };
  OneLinkedList() : base(new Node()) {}
  ~OneLinkedList() {
    clear();
    delete base;
  }
  void pushFront(const T &value) {
    new Node(base, value);
  }
  void pushBack(const T &value) {
    new Node(getLastNode(), value);
  }
  const T &get(size_t n) const {
    Node *result = base->next;
    while (n--) result = result->next;
    return result->data;
  }
  bool empty() const {
    return base == base->next;
  }
  size_t size() const {
    size_t result = 0;
    for (Node *node = base; node->next != base; node = node->next)
      ++result;
    return result;
  }
  void clear() {
    while (!empty()) {
      Node *next = base->next;
      base->next = next->next;
      delete next;
    }
  }
  T &operator[](size_t n) {
    Node *result = base->next;
    while (n--) result = result->next;
    return result->data;
  }
  const T &operator[](size_t n) const {
    return get(n);
  }
 private:
  Node *getLastNode() {
    Node *result = base->next;
    while (result->next != base) result = result->next;
    return result;
  }
  OneLinkedList(const OneLinkedList&);
  OneLinkedList &operator=(const OneLinkedList&);
  Node *base;
};
 
int main(int argc, char *argv[]) {
  OneLinkedList<int> a;
  for (int i = 0; i < 10; ++i)
    if (i % 2)
      a.pushBack(i);
    else
      a.pushFront(i);
  for (size_t i = 0; i < a.size(); ++i)
    std::cout << (a[i] = a[i] + 1) << " ";
  std::cout << std::endl;
  for (size_t i = 0; i < a.size(); ++i)
    std::cout << a[i] << " ";
  std::cout << std::endl;
}
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
14.02.2012, 22:11  [ТС] #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Идея, в целом, такова.
Создавать ноду, которая сама себя разместит. Для этого ей необходимо знать, за какой нодой она идет.
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
#include <iostream>
 
template <class T>
class OneLinkedList {
 public:
  struct Node {
    Node() : next(this) {}
    Node(Node *after, const T &data_) : next(after->next), data(data_) {
      after->next = this;
    }
    Node *next;
    T data;
  };
  OneLinkedList() : base(new Node()) {}
  ~OneLinkedList() {
    clear();
    delete base;
  }
  void pushFront(const T &value) {
    new Node(base, value);
  }
  void pushBack(const T &value) {
    new Node(getLastNode(), value);
  }
  const T &get(size_t n) const {
    Node *result = base->next;
    while (n--) result = result->next;
    return result->data;
  }
  bool empty() const {
    return base == base->next;
  }
  size_t size() const {
    size_t result = 0;
    for (Node *node = base; node->next != base; node = node->next)
      ++result;
    return result;
  }
  void clear() {
    while (!empty()) {
      Node *next = base->next;
      base->next = next->next;
      delete next;
    }
  }
  T &operator[](size_t n) {
    Node *result = base->next;
    while (n--) result = result->next;
    return result->data;
  }
  const T &operator[](size_t n) const {
    return get(n);
  }
 private:
  Node *getLastNode() {
    Node *result = base->next;
    while (result->next != base) result = result->next;
    return result;
  }
  OneLinkedList(const OneLinkedList&);
  OneLinkedList &operator=(const OneLinkedList&);
  Node *base;
};
 
int main(int argc, char *argv[]) {
  OneLinkedList<int> a;
  for (int i = 0; i < 10; ++i)
    if (i % 2)
      a.pushBack(i);
    else
      a.pushFront(i);
  for (size_t i = 0; i < a.size(); ++i)
    std::cout << (a[i] = a[i] + 1) << " ";
  std::cout << std::endl;
  for (size_t i = 0; i < a.size(); ++i)
    std::cout << a[i] << " ";
  std::cout << std::endl;
}
спасибо большое
но к сожалению я с классами еще не знаком и познакомлюсь скорей всего только через год
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.02.2012, 08:22 #4
Цитата Сообщение от crewww Посмотреть сообщение
пользовательский тип данных который создает
Какой вопрос, такой и ответ. Единственный пользовательский тип данных, который (условно) может "что-то делать", это класс.

Тем не менее, та же самая логика справедлива и для структур. Создавайте "кольцевой" список и вставляйте ноды как в моем примере.
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
15.02.2012, 12:32  [ТС] #5
Цитата Сообщение от lemegeton Посмотреть сообщение
Какой вопрос, такой и ответ. Единственный пользовательский тип данных, который (условно) может "что-то делать", это класс.

Тем не менее, та же самая логика справедлива и для структур. Создавайте "кольцевой" список и вставляйте ноды как в моем примере.
хорошо я попробую со структурами
0
15.02.2012, 12:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2012, 12:32
Привет! Вот еще темы с ответами:

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

Класс Линейный Список. - C++
#include &lt;iostream&gt; using namespace std; class Spisok { private: struct node { int elem; node...

Линейный двусвязный список - C++
Тип элемента списка определен так: struct llist{ int val; llist *next,*pred;}; //Создаётся статический список из 3 эл-тов ...

Двунаправленный линейный список - C++
Доброго времени суток! Я перевелся на 2ой курс в институте, где изучали С++, которого у меня не было. Поэтому спрашиваю вас - что такое...


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

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

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