Есть работающая программа на паскале: Код |
uses SysUtils;
Type pe=^el; {Указатель на элемент списковой структуры} el=record {Элемент списка} inf:real; {Информационное поле типа real} next:pe {Указатель на следующий элемент} end;
Var temp, firstp, lastp, p, firstq, lastq, q: pe; i, n, cycle, cycle2: integer; flag: boolean; vopros, vopros2: string;
Begin
Write('Vvedite kolichestvo elementov: '); ReadLn(n);
Writeln('Vvedite ', n, ' veshchestvennih chisel!');
//создание первого элемента new(firstp); Write('vvedite 1 element spiska: '); ReadLn(firstp^.inf); firstp^.next:=nil;
//заполнение основной части списка lastp:=firstp;
For i:=2 to n do begin new(p); Write('Vvedite ',i,' element spiska: '); ReadLn(p^.inf); p^.next:=nil; lastp^.next:=p; lastp:=p; end;
//вывод списка P на экран lastp := firstp;
Write('Spisok P = [ '); while lastp <> Nil do begin Write(lastp^.inf:6:2, ' '); lastp := lastp^.next; end; WriteLn(' ]');
//удаление повторяющихся элементов lastp := firstp;
while lastp <> Nil do begin p := lastp; temp := lastp^.next; while temp <> nil do begin if lastp^.inf = temp^.inf then begin p^.next := temp^.next; dispose(temp); temp := p^.next end else begin p := temp; temp := p^.next; end; end; lastp := lastp^.next; end;
//вывод списка P на экран lastp := firstp;
Write('Spisok P = [ '); while lastp <> Nil do begin Write(lastp^.inf:6:2, ' '); lastp := lastp^.next; end; WriteLn(' ]');
readln
end.
|
Пытался переделать её под С++: Код | #include <iostream.h> #include <conio.h>
struct node { double inf; node *next; };
void main() { int i, n, r;
{
cout << "\nVvedite kolichestvo elementov v spiske: "; cin >> n ;
node *firstp, *p, *lastp, *temp; firstp=NULL; //Начало создания первого элемента списка P firstp=new node; cout<<"Vvedite 1 element spiska: "; cin >> firstp->inf; firstp->next=NULL; //Завершение создания первого элемента списка P
lastp=firstp; for (i = 2; i < n+1; ++i) //Занесение элементов в список P { p=new node; cout<<"Vvedite "<< i <<" element spiska: "; cin >> p->inf; p->next=NULL; lastp->next=p; lastp=p; //Завершение занесения элементов в список P }
lastp=firstp; //Распечатка списка P if (r==0) cout<<"\nSpisok P pust!\n"; else { cout<<"\nSpisok P:\n"; while (lastp!=NULL) { cout << lastp->inf << endl; delete(lastp); //Возврат задействованной памяти в КУЧУ lastp=lastp->next; } } //Завершение распечатки Списка P
//удаление повторяющихся элементов lastp=firstp; while (lastp!=NULL) { p = lastp; temp = lastp->next; while (temp!=NULL) { if ((lastp->inf) == (temp->inf)) { p->next = temp->next; delete(temp); temp = p->next; } else { p = temp; temp = p->next; } } lastp = lastp->next; };
lastp=firstp; //Распечатка списка P if (r==0) cout<<"\nSpisok P pust!\n"; else { cout<<"\nSpisok P:\n"; while (lastp!=NULL) { cout << lastp->inf << endl; delete(lastp); //Возврат задействованной памяти в КУЧУ lastp=lastp->next; } } //Завершение распечатки Списка P
}
getch(); return; }
|
Но функция удаления работать не хочет! Что делаю не так? =) Код | Vvedite kolichestvo elementov v spiske: 3 Vvedite 1 element spiska: 22 Vvedite 2 element spiska: 4 Vvedite 3 element spiska: 22
Spisok P: 22 4 22
Spisok P: 3.5607e-306 4 1.41043e-65
|
|