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

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

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

 
 Ответить  Открыть новую тему 
> Список+указатели, Вставка нового элемента в список
Юличка
сообщение 24.06.2005 9:08
Сообщение #1


Гость






Помогите составить программу, которая вставляет в список L
новый элемент F перед первым вхождением элемента Е,
если Е входит в L. Программа должна быть реализована
с применением динамических переменных (указателей).
 К началу страницы 
+ Ответить 
hiv
сообщение 24.06.2005 9:13
Сообщение #2


Профи
****

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

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


Поиском надо пользоваться!
Здесь все есть: FAQ: Списки


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.06.2005 9:26
Сообщение #3


Гость






Если список объявлен вот так:
Type
point = ^item;
item = record
number: integer;
next: point
end;
Var my_root: point;

то процедура,
Цитата(Юличка @ 24.06.05 9:08)
которая вставляет в список L новый элемент F перед первым вхождением элемента Е, если Е входит в L.
, будет такой:
procedure do_insert(x: integer);
var q: point;
begin
search(my_root, x, q);
if q <> nil then insert_before(q, x)
end;


Все остальное, что необходимо для создания списка и его заполнения - здесь:
FAQ: Динамические структуры данных - Списки
 К началу страницы 
+ Ответить 
НарКот
сообщение 24.06.2005 21:04
Сообщение #4





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

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


Юлечка. Посмотри-ка
Количество элементов можешь изменить по своему усмотрению (const N=14)!!!
Исходный код
Uses Crt;
Type
Spis=^L;
L=record
El: Word;
Next: Spis
end;
Var
A:array[1..15] of Spis;
k,j,i,E,F:integer;
q:char;
const
N=14;
{===== =====}

{
данная функция ищет вхождение элемента Е
в список, и при его наличии в нем вставляет
впереди него элемент F
}
function Search(simb:integer):Spis;
var
i,j,k:integer;
Begin
k:=1;
For i:=1 To N Do
If A[i]^.El=E Then {проверка принадлежности элемента Е массиву данных }
Begin
For j:=N+1 DownTo i Do
A[j]^.El:=A[j-k]^.El; {сдвиг элементов массива начиная с элемента Е}
A[i]^.El:=F; {вправо на одну ячейку и запись}
Inc(k); {на место элемента Е элемента F}
Break;
End;
End;

repeat
ClrScr;
TextColor(red);
Randomize;
WriteLn('Превоначальный список');
For i:=1 To N Do New(A[i]); {Резервируем фрагменты кучи}
A[N+1]^.El:=0; {последнему элементу для удобства присваиваем 0}
For i:=1 To N Do
Begin
A[i]^.El:=Random(15);
WriteLn('*',A[i]^.El)
End;
A[N+1]^.Next:=Nil; {Стираем последний указатель }
{===== =====}
TextColor(blue);
Write(' Введите элемент списка Е= ');
ReadLn(E);
Write('Введите вставляемый в список элемент F= ');
ReadLn(F);
{===== =====}
Search(E);
TextColor(yellow);
WriteLn('Модифицированный список имеет вид: ');
For i:=1 To (N+1) Do
WriteLn('*',A[i]^.El);
WriteLn('Повторить ЕЩЕ?(Y/N)');
q:=ReadKey;
until not (q in ['Y','y']);
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.06.2005 21:20
Сообщение #5


Гость






НарКот, вообще-то здесь стараются НЕ давать полностью готовых решений, тем более - того, что можно найти в FAQ-е...

И уж совсем желательно воздерживаться от реализации списков через массивы, ты теряешь все их преимущества...
 К началу страницы 
+ Ответить 
Altair
сообщение 24.06.2005 21:51
Сообщение #6


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

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


НарКот, более того, реализовать список на массивах просто невозможно.
Это будет обычный массив.
Вот на спиках и массивах уже можно организовывать различные АТД (абстрактые типы данных по терминологии А. Ахо), такие как стек, очередь, дерево, дек и другие.
Поскольку для них важны правила доступа к элементам АТД, а не реализация самих данных...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Катюша
сообщение 25.06.2005 0:38
Сообщение #7


Гость






а какой список нужно?

я могу попробовать :yessss:

Да, в принципе, пробовать-то нечего... Читаем ВНИМАТЕЛЬНО пост №3 (и идем по ссылке, там ВСЕ реализовано уже давным-давно...), кому-то так охота создать свой велосипед?

Сообщение отредактировано: volvo - 25.06.2005 0:42
 К началу страницы 
+ Ответить 

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

 



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