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

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

Войти
Регистрация
Восстановить пароль
 
johnybravo
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 4
#1

Навигация в двунаправленном списке. - C++

16.05.2012, 14:14. Просмотров 476. Ответов 0
Метки нет (Все метки)

Здравствуйте!

Проблема такая. Не могу придумать как можно реализовать навигацию в двунаправленном списке таким образом например: нажимаешь 1 - отображает текущий элемент(выбранный), нажимаешь 2 - переходит на следующий элемент по указателю и его отображает, нажимаешь 0 - переходит на предыдущий элемент по указателю и отображает его. чтобы можно было как бы пролистывать список, тем самым наглядно показать что он двунаправленный(листинг в обе стороны).

Желательно добавить или изменить имеющийся класс.

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
#include <iostream>
using namespace std;
 
class Node        //один узел, представленный в виде структуры
{
friend class List;//объявляем класс Список дружественным, чтобы он имел доступ к закрытым полям
private:
   int key;       //номер узла в списке
   int data;      //данные, содержащиеся в узле
   Node *next;    //указатель на следующую структуру
   Node *last;    //указатель на предыдущую структуру
   
public:
   Node(int data, Node *next, Node *last)
   {
      this->data = data;
      this->next = next;
      this->last = last;
   }
   
   Node(int data)
   {
      this->data = data;
   }
};
 
class List        //класс, описывающий объект "список"
{
private:
   Node *head;   //голова списка (указатель на первый узел в списке)
   Node *temp;   //указатель на последний узел в списке
   
public:
   List() : head(NULL), temp(NULL) //в первом созданном объекта указатель равен нулю, т.к. следующего объекта еще нет и указывать не на что
   {
   }
   
   void addNodeEnd(int data)     //метод, добавляющий узел в конец списка
   {
      Node *nd = new Node(data, NULL, temp); //создаем новый узел, добавляем в него данные и делаем его последним, присваивая NULL
      temp = nd;
      
      if(head)
      {
         Node *current = head;  //указывает на начало списка, на первый узел; и используется в цикле для нахождения предыдущего узла
         while(current->next)   //прокручиваем в цикле наш список, пока не дойдем до последнего узла, остановившись на предыдущем
            current = current->next; //переходим на следующий узел
            
            current->next = nd;    //предыдущий указывает на следующий узел
      }
      else                       //если список был пуст и создается первый узел, то голова указывает на него
         head = nd;             //у головы бывает два состояния: она либо NULL, либо указывает на первый узел в списке
         
      numNode(); //нумеруем узлы списка
   }
void deleteNodeEnd() //удаление узла в конце списка
   {
      if(temp)
      {
         Node *current = temp;
         current = current->last;
         delete current->next;
         current->next = NULL;
      }
      else
         cout << "The list is empty!" << endl;
   }
int find(int k) //поиск по ключу в списке
   {
      Node *counter = head;
      while(counter)
      {
      if(counter->key == k)
         return counter->data;
         
      counter = counter->next;
      }
   }
void printListForward() const //выводим на печать наш список в прямом порядке
   {
      Node *current = head;
      while(current)             //пока не дойдем до последнего узла
      {
         cout << current->key << " - " << current->data << endl;   //выводим данные на экран
         current = current->next;         //переходим к следующему узлу
      }
   }
void numNode() //внутренняя функция-утилита, нумерует узлы списка
   {
      Node *counter = head;
      int i = 0;
      while(counter)
      {
         counter->key = ++i;
         counter = counter->next;
      }
   }
};
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 14:14     Навигация в двунаправленном списке.
Посмотрите здесь:

Сортировка в двунаправленном списке - C++
ШАБЛОН КЛАССА #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; class List { struct...

Навигация по директориям - C++
Здравствуйте! Помогите пожалуйста реализовать навигацию по директориям. Например открывается консольное окно в директории d:\soft . Хочу...

ifstream и навигация по файлу - C++
открыл файл , прочитал его весь, хочу снова на начало файла перейти хз как. если открывать через fopen то понятно что через fseek а когда...

Навигация по коду, MVS 2013 - C++
Уважаемы, подскажите пожалуйста горячие клавиши, для навигации. Допустим ситуация, есть у меня вызов какого-то метода: int a =...

Навигация в консоли С++ стрелками и выбор подменю клавишей Ввода - C++
Добрый день, столкнулся со следующей задачей (конечно больше для себя, но уже загорелся ею!) - есть консольное меню (скриншот). Хотелось...

Ошибка в списке - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; template&lt;typename T&gt; class IList { public: ...

Поиск в списке - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; struct element{ ...

Коструктор в списке - C++
Извините что неуч и спрашиваю дебильные вопросы. Вот к примеру: обыкновенный двусвязный список, хочу перегрузить конструктор, что бы не...

Удаление в списке - C++
Реализован метод удаления после какого-то элемента в спике: void remove(Node *where) { if (nodes&gt;1 &amp;&amp; where-&gt;next != 0) { ...

Поиск в лин. списке - C++
Помогите сделать сам поиск..я уже замучился.. вот что у меня сейчас { int...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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