Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамический структуры данных (списки)

78K
27 декабря 2011 года
nbaka
1 / / 27.12.2011
Задание:Удалить из списка последний элемент.

Код:
#include<iostream.h>
#include<conio.h>
struct elem
{
int Data;
elem *Next;
};
 
elem *Create()
{
 elem *pl = new elem;
 cout << "vvedite element: " << endl;
 cin >> pl -> Data;
 pl -> Next = 0;
 return pl;
 }
 
elem *insFirst(int n)
{
 elem *q = Create();
 elem *p;
 for (int i=0;i<n-1;i++)
 {
 p = Create();
 p->Next = q;
 q = p;
 }
 return q;
 }
 
 elem *showpis(elem *pl)
   {
  while(pl)
  {
   cout << " " << pl -> Data;
   pl = pl -> Next;
   }
   cout << "\n";
   return pl;
   }
 
void main(void)
{
 int n;
 cout << "vvedite kol-vo elementov spiska: ";
 cin >> n;
 elem *k = insFirst(n);
 cout << "spisok: ";
 showpis(k);
 getch();
}


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

я вообще правильно написал функции ?
16K
28 декабря 2011 года
asmforce
186 / / 05.01.2010
Зачем его дважды переворачивать? Это что за символический вальс с бубном, когда:

Код:
struct Elem  {
  int data;
  elem *next;
};

void removeLast( Elem *list )
{
  if( !list )
    return;
  for( Elem *item = list; item->next; item = item->next )  {
    if( !item->next->next )  {
      delete item->next->next;
      item->next = 0;
      break;
    }
  }
}


P.S. Тут не предусмотрена ситуация, в которой список состоит из одного элемента, т.к. в этом случае требуется обнулить исходный указатель на первый эл. списка. Тут уж решение индивидуальное, зависит от контекста.
360
28 декабря 2011 года
P*t*
474 / / 15.02.2007
Переворачивать нужно, если для стека реализован интерфейс с командами push, pop и empty, а детали реализации скрыты.
 
Код:
while  ! a.empty
     b.push( a.pop )
b.pop()
while  ! b.empty
     a.push( b.pop )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог