IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с указателями на массив, указатели на массив и их перенос
osa
сообщение 10.04.2005 11:50
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Здравствуйте , мне необходимо
1) создать массив
2) установить его указатели на массив и на след элемент (создать список указателей на массив и на следуюющий элемент еще в сегменте данных)
3) и поменять эти указатели

П.С.
эсли 1) и 2) я представляю как сделать то 2) да еще и в сегменте данных я не представляю .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.04.2005 12:46
Сообщение #2


Гость






Ты толком объяснить можешь? У тебя есть список... Само собой, что каждый элемент списка содержит адрес следующего элемента списка, но ведь кроме этого он тоже что-то содержит !!! Так вот я и хочу узнать, ЧТО ИМЕННО должен содержать каждый элемент списка??? Допустим, первый - содержит адрес массива, а второй? А третий? Четвертый? ...

Вот так задается список:
Код

type tlist = record
 data: ... { <--- вот тут что хранится будет ???}
 next: ^tlist; { тут-ясно, что след. элемент списка }
end;

Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива?

Это же как минимум 4-х кратный проигрыш в размере !!!
 К началу страницы 
+ Ответить 
osa
сообщение 10.04.2005 13:03
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


!Смотри 0 элем списка указывает указывает на 1 ; 1 на 2ой и тд вплоть до последнего ! ясно что в списке будет даные даные указывайт на елемент массива , т е в 1 елементе списка храниться адресс 1 ячейки массива ... и т.д. !
впроть до последнего там понятно nil.

! Как задаеться переменные списка я знаю мне бы надо чтобы в данных он уже был полностью создан ! тоесть у меня массив из 8 елементов
и был бы список из 10 эелементов
BegL -> 1 -> 2 -> 3 -> 4 -> ... 8-> EndL
@A[1] @A[2] @A[3] @A[4] @A[8]

Цитата(volvo @ 10.04.05 12:46)
Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива?

Это же как минимум 4-х кратный проигрыш в размере !!!

А на память мне все равно! вернее этим способом я освобождаю как минимум
в 2 раза память ! чем я бы использовал другой метод !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.04.2005 13:11
Сообщение #4


Гость






Цитата(osa @ 10.04.05 13:03)
вернее этим способом я освобождаю как минимумв 2 раза память ! чем я бы использовал другой метод !

А вот теперь я тебе покажу, КАК это делается, а ты мне приведешь пример того, как при этом ИЗВРАТЕ ты в 2 раза минимум освобождаешь память... Не забудь, что в DS хранится И массив И список, что уже забирает лишнюю память. Кстати, это почему у тебя при массиве длинной 8 элементов длина списка = 10? Это тоже часть твоей суперстратегии?
Код
const
 n = 10;
 arr: array[1 .. n] of integer =
   (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

type
 pint = ^integer;
 plist_rec = ^list_rec;
 list_rec = record
   data: pint;
   next: plist_rec;
 end;

var
 list: array[1 .. n] of list_rec;
 p, head: plist_rec;
 i: integer;
begin
 head := @list[1];

 for i := 1 to n do begin
   list[i].data := @arr[i];
   if i <> n then
     list[i].next := @list[succ(i)]
   else list[i].next := nil;
 end;

 p := head;
 while p <> nil do begin
   writeln(p^.data^);
   p := p^.next
 end;

end.

Теперь твоя очередь... Каким образом ЭТО экономит память по сравнению с простым использованием массива?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"