Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 17:18   #1
Kovax
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 28
По умолчанию Вставка элемента в список

Очень требуется ваша помощь, заранее премного благодарен.
Нужно вставить элемент после n-го элемента в односвязном списке. Сделал набросок, но программа работает не правильно.
Код:
program spisok;
type Ptr=^count;
count=Record
Key:integer;
Next:ptr;
Info:char; // Символьный тип
end;
var p,q,head,temp:ptr;
n:integer;
begin // Создание исходного списка
n:=4;
p:=nil; // nil - отсутствие адреса
while n>0 do
begin
new(q); // Создаем новый элемент списка
q^.next:=p;
p:=q;
q^.key:=n;
readln(q^.info);
n:=n-1;
end;
head:=q;
// Добавим новый элемент в начало списка
begin
new(temp);
new(q);
writeln('Введите элемент для добавления');
readln(q^.info);
end;
begin
 new(q^.next);
 q^.next^.Key:=n;
 q^.next^.next:=nil;
 q:=q^.next;
 end;
while q<>nil do
begin
writeln(q^.info);
q:=q^.next;
end;
end.

Последний раз редактировалось Kovax; 09.03.2011 в 19:37.
Kovax вне форума Ответить с цитированием
Старый 09.03.2011, 20:17   #2
Kovax
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 28
По умолчанию

Код:
program spisok;
type Ptr=^count;
count=Record
Key:integer;
Next:ptr;
Info:char; // Символьный тип
end;
var p,q,head,temp:ptr;
n:integer;
begin // Создание исходного списка
n:=4;
p:=nil; // nil - отсутствие адреса
while n>0 do
begin
new(q); // Создаем новый элемент списка
q^.next:=p;
p:=q;
q^.key:=n;
readln(q^.info);
n:=n-1;
end;
begin
writeln('Введите номер элемента, после которого вы хотите вставить данный элемент(номер от 1 до 4): ');
readln(n);
end;
head:=q;
// Добавим новый элемент в начало списка
begin
new(temp);
new(q);
writeln('Введите элемент для добавления');
readln(q^.info);
for n:=1 to 4 do
begin
q^.next^.Key:=n;
q^.next^.next:=nil;
q:=q^.next;
end
end;
while q<>nil do
begin
writeln(q^.info);
q:=q^.next;
end;
end.
При вставке нового элемента выводит ошибку :
»*Непредвиденное исключение EAccessViolation. Access violation at address 004A9972 in module 'PascalABC.exe'. Write of address 00003110. Программа завершена

Последний раз редактировалось Kovax; 09.03.2011 в 20:26.
Kovax вне форума Ответить с цитированием
Старый 09.03.2011, 20:28   #3
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
Радость

Код:
uses crt;

type Ptr=^count;
count=Record
   Key:integer;
   Next:ptr;
end;
var p,q,first,l:ptr;
n,m,k,i:integer;
begin
writeln('Razmer Spiska');
readln(m);
writeln('Vvedite n');
readln(n);
writeln('Vvedite k');
read(k);
new(p);
first:=p;
p^.next:=nil;
read(p^.key);
q:=p;
for i:=2 to m do
begin
     new(p);
     read(p^.key);
     p^.next:=nil;
     q^.next:=p;
     q:=p;
end;
p:=first;
i:=1;
while ((i < n - 1)and(p <> nil))do
begin
    p:=p^.next;
    inc(i);
end;
new(l);
q:= p^.next;
p^.next:=l;
l^.next:=q;
l^.key:=k;
p:=first;
while (p<>nil) do
begin
    write(p^.key,' ');
    p:=p^.next;
end;
end.
Летучий_СкилетиК вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка элемента Dmitry73 Помощь студентам 0 06.12.2010 19:04
вставка элемента Dmitry73 Помощь студентам 2 05.12.2010 11:06
вставка элемента zhenya.ya Помощь студентам 0 28.04.2010 18:53
Вставка элемента в массив Игорь777 Помощь студентам 1 04.12.2008 18:57
Вставка элемента в SelectDirectory mrandrey Общие вопросы Delphi 1 31.05.2007 20:25