Перейти к содержимому

Фото
- - - - -

[C++]Переобозначить ссылки в обратном порядке


  • Вы не можете создать новую тему
  • Please log in to reply
6 ответов в этой теме

#1 qwerty_90

qwerty_90
  • Новобранец
  • 2 сообщений

Отправлено 03 Май 2007 - 18:34

вот такая вот задачка. я в этой теме новичкок, ничего не знаю...если кто знает...заранее благодарна...

Составить список из N элементов. Переобозначить ссылки так, чтобы элементы оказались расположенными в обратном порядке.
  • 0

#2 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 05 Май 2007 - 06:10

Если я правильно понимаю ... то это просто реверсный массив ...

То есть стандарно для перебора элементов массива ты используешь выражение типа
for(int i = 0;i < massiv.length; i++) ...
для решения поставленного задания тебе надо использовать
for(int i = massiv.length;i > 0; i--) ...
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#3 qwerty_90

qwerty_90
  • Новобранец
  • 2 сообщений

Отправлено 07 Май 2007 - 17:14

не, если бы просто массив перевернуть, то да, а здесь же списки, я просто пока плохо понимаю в них, думала по задачке примерно разобраться....
  • 0

#4 sergeiE

sergeiE
  • Новобранец
  • 1 сообщений

Отправлено 07 Май 2007 - 17:48

что есть список, как не массив с одним измерением?
Из этой невменяемой постановки задачи можно примерно догадаться, о чем речь - и скорее всего речь именно о том, чтобы отреверсировать массив, как и говорил CyBurglar.
  • 0

#5 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 07 Май 2007 - 17:54

может автор говорит о самодельных связных списках, а не о массивах ?
т. е. типо
struct Node
{
  int data;
  Node *next;
  Node *prev;
};
автор, обьясни задачу
  • 0
int main(void)

#6 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 07 Май 2007 - 20:24

может автор говорит о самодельных связных списках, а не о массивах ?
т. е. типо

struct Node
{
  int data;
  Node *next;
  Node *prev;
};
автор, обьясни задачу


Если о них, то тоже ничего сложного ...
Дано:
Двусвязный список List, кажется так эта структура называется. То есть условия следкющие :
начальный элемент списка определяется условием List[первый].prev = null . Так же из этого условия следует что такой - начальный элемент есть только один. И так же только одни элемент которого удовлетвояет условию (признаку) конечного элемента List[последний].next = null.
Остальные элементы полностью связаныи являются промежуточными звеньями нашей цепи (я полволю здесь себе это слово) ...

Надо:
Чтобы List[первый] и List[последний] поменялись местами. При чем каждый элемент List должен не потерять своих соседей как слева так и справа (сорри, проще я неполучается обяъснить).

Решение:

:D А решения нет ... сама структура двусвязного списка отвечает условиям реверсии. И в этих же целях была разработана и применяется по сей день ... тривиально, не правдали! <_<


Позволю себе изменить структуру элемента нашего списка ...
struct Node
{
  int data;
  Node *next;
};

То есть по списку можно гулять тока в одном направлении и теперь нам надо сделать так чтобы посписку можно было гулять точно в противоположную сторону с условием соблюдения сосдства ...
Многие наверно заметили что мы имеем дело с самым обыкновыным массовом где просто отсутвует понятие индекса ... только вместо временного индекса используется временный указатель.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#7 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 07 Май 2007 - 23:22

если одиночный, тогда можно поступить так:
list_reversed = null;
while (list != null)
{
  temp = list->next;
  list->next = list_reversed;
  list_reversed = list;
  list = temp
}

return list_reversed;
}

  • 0
int main(void)