Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Указатели и работа с ними в C++Builder6
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Fil75 Fil75 вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.05.2006
По умолчанию Указатели и работа с ними в C++Builder6 - 24.05.2006, 00:46

Помогите решить следущую задачу. Имеется программа работа со списком элементов через указатели. Нужно продолжить программу написав функцию, которая бы выводила список элементов с конца, т.е. в обратном порядке. В структуру нужно добавить указатель last.
Например listenelement* last. Я постарался закомментировать почти все строки. К сожалению сам пока не могу додуматься как решить. Спасибо, тем кто поможет.
Код:
#include <iostream.h>
struct listenelement           //Создаем структуру
      {char daten[30];
       listenelement* next;
      };

 listenelement* listenanfang;  //описываем  указатель на нач. списка
 listenelement* hilfszeiger;     // описываем  указатель для перемещения по списку

 void einfuegen(char datenneu[30])  // функция вставки элементов в список
     {
      hilfszeiger=listenanfang;         // указатель на начало списка

        while (hilfszeiger->next != NULL)  //проходим список до последнего элемента
             {
               hilfszeiger = hilfszeiger->next;  
             }
      hilfszeiger->next = new(listenelement); // вносим в список новый элемент
      hilfszeiger = hilfszeiger->next;               // указатель на новый элемент

      strcpy(hilfszeiger->daten,datenneu);      //данные в новый элемент вносим
      hilfszeiger->next = NULL;
     }
 void ausgeben()       // функция  вывода элементов списка(Liste)
     {
      hilfszeiger = listenanfang;      // указатель на начало списка
      cout << hilfszeiger->daten << "n";   // выводим на экран элементы списка

        while (hilfszeiger->next != NULL) // проходим список до конца
              {
               hilfszeiger=hilfszeiger->next;  // идем на след. элемент
               cout << hilfszeiger->daten << "n";  // на экран
              }
     }

 void init() // инициализация списка
      {
       listenanfang = new(listenelement);  // первый элемент производим
       listenanfang->next = NULL;
       strcpy(listenanfang->daten ,"Element 0"); // записываем данные в первый элемент
      }

 void ende ()  // функция опустошения списка и высвобождение памяти
      {

          while (listenanfang != NULL) // пробегаем по всем елементам
                {
                 hilfszeiger = listenanfang; //указатель на первый элемент
                 listenanfang = listenanfang->next; // указатель на след элемент
                 delete(hilfszeiger); // удаляем
                }
        }

 void main()
     {
      init(); // инициализируем
      einfuegen("Element 1"); // вводим елемент
      einfuegen("Element 2"); // еще элемент вводим
      ausgeben(); // выводим на экран
      ende();  // удаляем и очищаем память

      char p[50];
      cin.getline(p,50);
     }
Ответить с цитированием
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию Re: Указатели C++Builder6 - 24.05.2006, 12:17

Цитата:
Originally posted by Fil75
[b]Нужно продолжить программу написав функцию, которая бы выводила список элементов с конца, т.е. в обратном порядке. В структуру нужно добавить указатель last.
Например listenelement* last.
Логичнее было бы добавить в структуру элемент previous - указатель на предыдущий элемент. Тогда получится двунаправленный список, который одинаково удобно проходить в обе стороны.
Ответить с цитированием
  (#3 (permalink)) Старый
Fil75 Fil75 вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.05.2006
По умолчанию 25.05.2006, 15:45

Могли бы вы подсказать (кодом) как это сделать. Это домашнее задание по информатике. Я не особо эту тему понял и спросить не могу сейчас (учусь заочно) поэтому на форум обратился к опытным специалистам
Ответить с цитированием
  (#4 (permalink)) Старый
bas bas вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.05.2006
По умолчанию Re: Указатели C++Builder6 - 25.05.2006, 16:35

Цитата:
Originally posted by Fil75
[b]Помогите решить следущую задачу. Имеется программа работа со списком элементов через указатели. Нужно продолжить программу написав функцию, которая бы выводила список элементов с конца, т.е. в обратном порядке. В структуру нужно добавить указатель last.
Например listenelement* last. Я постарался закомментировать почти все строки. К сожалению сам пока не могу додуматься как решить. Спасибо, тем кто поможет.
зачем изобретать велосипед непойму

есть std::list и много всякого другого человечество
уже успело изобрести до тебя
Ответить с цитированием
  (#5 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 25.05.2006, 16:48

Цитата:
Originally posted by Fil75
[b]Могли бы вы подсказать (кодом) как это сделать. Это домашнее задание по информатике. Я не особо эту тему понял и спросить не могу сейчас (учусь заочно) поэтому на форум обратился к опытным специалистам
Подсказать - могу запросто. Делать задание за тебя я не буду.
Это уж как-нибудь сам.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Huan Huan вне форума
Member
 
Сообщений: 79
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.01.2006
По умолчанию 25.05.2006, 19:09

Попробуй рекурсивно:
Код:
void Print(listenelement* listenanfang){
  if(listenanfang->next != NULL) Print(listenanfang->next );
  cout << listenanfang->daten << "n";   
}
Ответить с цитированием
  (#7 (permalink)) Старый
Pchelka Pchelka вне форума
Member
 
Сообщений: 112
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.11.2004
По умолчанию Re: Указатели C++Builder6 - 02.06.2006, 22:55

Цитата:
Originally posted by bas
[b]есть std::list и много всякого другого человечество
уже успело изобрести до тебя
У меня вопрос возник по использованию std::list. Возможно ли использование нескольких информационных полей у одного элемента списка. Дело в том, что у меня задача заключается в том, что нужно в одном элементе хранить три значения разного типа. Это реально используя std::list
Ответить с цитированием
  (#8 (permalink)) Старый
Pchelka Pchelka вне форума
Member
 
Сообщений: 112
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.11.2004
По умолчанию Re: Указатели C++Builder6 - 02.06.2006, 22:55

Цитата:
Originally posted by bas
[b]есть std::list и много всякого другого человечество
уже успело изобрести до тебя
У меня вопрос возник по использованию std::list. Возможно ли использование нескольких информационных полей у одного элемента списка. Дело в том, что у меня задача заключается в том, что нужно в одном элементе хранить три значения разного типа. Это реально используя std::list
Ответить с цитированием
  (#9 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 03.06.2006, 04:29

Код:
#include <iostream.h> 
struct listenelement           //Создаем структуру 
      {char daten[30]; 
       listenelement* next;
       listenelement* prev; 
      }; 

 listenelement* listenanfang;  //описываем  указатель на нач. списка 
 listenelement* hilfszeiger;     // описываем  указатель для перемещения по списку 

 void einfuegen(char datenneu[30])  // функция вставки элементов в список 
     { 
      hilfszeiger=listenanfang;         // указатель на начало списка 

        while (hilfszeiger->next != NULL)  //проходим список до последнего элемента 
             { 
               hilfszeiger = hilfszeiger->next;  
             } 
      hilfszeiger->next = new(listenelement); // вносим в список новый элемент 
      hilfszeiger->next->prev = hilfszeiger;  // предыдущий нового элемента - текущий
      hilfszeiger = hilfszeiger->next;               // указатель на новый элемент 

      strcpy(hilfszeiger->daten,datenneu);      //данные в новый элемент вносим 
      hilfszeiger->next = NULL; 
     } 
 void ausgeben()       // функция  вывода элементов списка(Liste) 
     { 
        while (hilfszeiger->next != NULL) // проходим список до предпоследнего 
              { 
               hilfszeiger=hilfszeiger->next;  // идем на след. элемент 
              }
        while(hilfszeiger->prev != NULL) // идём в обратном порядке
              {
               cout << hilfszeiger->daten << "n";   // выводим на экран элементы списка
               hilfszeiger=hilfszeiger->prev;  // идем на след. элемент 
              }
     } 

 void init() // инициализация списка 
      { 
       listenanfang = new(listenelement);  // первый элемент производим 
       listenanfang->next = NULL; 
       listenanfang->prev = NULL;
       strcpy(listenanfang->daten ,"Element 0"); // записываем данные в первый элемент 
      } 

 void ende ()  // функция опустошения списка и высвобождение памяти 
      { 

          while (listenanfang != NULL) // пробегаем по всем елементам 
                { 
                 hilfszeiger = listenanfang; //указатель на первый элемент 
                 listenanfang = listenanfang->next; // указатель на след элемент 
                 delete(hilfszeiger); // удаляем 
                } 
        } 

 void main() 
     { 
      init(); // инициализируем 
      einfuegen("Element 1"); // вводим елемент 
      einfuegen("Element 2"); // еще элемент вводим 
      ausgeben(); // выводим на экран 
      ende();  // удаляем и очищаем память 

      char p[50]; 
      cin.getline(p,50); 
     }
Вот как-то так.

2 Pchelka
std::list оперирует с указателями на что угодно. Скормишь ему указатель не структуру с "несколькими информационными полями" и решишь свою задачу
Ответить с цитированием
Ads
  (#10 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 03.06.2006, 04:29

Код:
#include <iostream.h> 
struct listenelement           //Создаем структуру 
      {char daten[30]; 
       listenelement* next;
       listenelement* prev; 
      }; 

 listenelement* listenanfang;  //описываем  указатель на нач. списка 
 listenelement* hilfszeiger;     // описываем  указатель для перемещения по списку 

 void einfuegen(char datenneu[30])  // функция вставки элементов в список 
     { 
      hilfszeiger=listenanfang;         // указатель на начало списка 

        while (hilfszeiger->next != NULL)  //проходим список до последнего элемента 
             { 
               hilfszeiger = hilfszeiger->next;  
             } 
      hilfszeiger->next = new(listenelement); // вносим в список новый элемент 
      hilfszeiger->next->prev = hilfszeiger;  // предыдущий нового элемента - текущий
      hilfszeiger = hilfszeiger->next;               // указатель на новый элемент 

      strcpy(hilfszeiger->daten,datenneu);      //данные в новый элемент вносим 
      hilfszeiger->next = NULL; 
     } 
 void ausgeben()       // функция  вывода элементов списка(Liste) 
     { 
        while (hilfszeiger->next != NULL) // проходим список до предпоследнего 
              { 
               hilfszeiger=hilfszeiger->next;  // идем на след. элемент 
              }
        while(hilfszeiger->prev != NULL) // идём в обратном порядке
              {
               cout << hilfszeiger->daten << "n";   // выводим на экран элементы списка
               hilfszeiger=hilfszeiger->prev;  // идем на след. элемент 
              }
     } 

 void init() // инициализация списка 
      { 
       listenanfang = new(listenelement);  // первый элемент производим 
       listenanfang->next = NULL; 
       listenanfang->prev = NULL;
       strcpy(listenanfang->daten ,"Element 0"); // записываем данные в первый элемент 
      } 

 void ende ()  // функция опустошения списка и высвобождение памяти 
      { 

          while (listenanfang != NULL) // пробегаем по всем елементам 
                { 
                 hilfszeiger = listenanfang; //указатель на первый элемент 
                 listenanfang = listenanfang->next; // указатель на след элемент 
                 delete(hilfszeiger); // удаляем 
                } 
        } 

 void main() 
     { 
      init(); // инициализируем 
      einfuegen("Element 1"); // вводим елемент 
      einfuegen("Element 2"); // еще элемент вводим 
      ausgeben(); // выводим на экран 
      ende();  // удаляем и очищаем память 

      char p[50]; 
      cin.getline(p,50); 
     }
Вот как-то так.

2 Pchelka
std::list оперирует с указателями на что угодно. Скормишь ему указатель не структуру с "несколькими информационными полями" и решишь свою задачу
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SMPP компоненты и работа с ними bassbuster C++ Builder 4 02.07.2013 13:39
C++ Работа с динамической памятью через указатели. Hqw33 Вопросы начинающих программистов 0 25.03.2012 12:38
Строки и работа над ними 123456789igor С/С++ 1 28.12.2011 10:39
Сокеты и работа с ними *Юльчик* C++ Builder 2 02.04.2010 15:50
Файлы и с ними работа Zayti Visual Basic 0 26.12.2008 12:37
Работа с компонентами через указатели Niflheimr C++ Builder 4 11.06.2007 15:30
Указатели как с ними работать Гоблин Java 4 21.03.2007 17:25
Модальные формы и работа с ними toshkaexe C++ Builder 1 12.02.2007 11:59
Данные класса и работа с ними Rune Вопросы начинающих программистов 6 27.09.2006 07:45
radiobutton и работа с ними Geneva PHP 3 24.05.2006 01:27
Работа с шириной и высотой bmp в Builder6 Builder блин C++ Builder 3 10.05.2006 13:54
Классы в DLL и работа с ними AntiGamer Visual C++ 10 08.03.2005 22:44



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов