![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
sasha. |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Женский Реальное имя: Aleksandra Репутация: ![]() ![]() ![]() |
Условие: Создать упорядоченный двусвязный список (элементы идут в порядке возрастания). Добавить элемент в список.
Программа в Pascal : Код program dvipsarasas; uses crt; type sar=^el; el=record duom:integer; kitas:sar; atgal:sar; end; procedure sukurti_sar (var pradzia:sar); var x:integer; g,temp:sar; begin writeln('Ivesk sveikus skaicius. Pabaigai spausk 0'); readln(x); while x<>0 do begin if pradzia=nil then begin new(g); g^.duom:=x; g^.kitas:=nil; g^.atgal:=nil; pradzia:=g; end else begin new(temp); g^.kitas:=temp; temp^.atgal:=g; g:=temp; g^.duom:=x; end; readln(x); end; writeln('Sarasas sukurtas'); end; procedure iterpti_pr(var pradzia:sar; x:integer); var elem:sar; begin new(elem); elem^.duom:=x; elem^.kitas:=pradzia; pradzia^.atgal:=elem; elem^.atgal:=nil; pradzia:=elem; end; procedure iterpti_pb(pradzia:sar; duomenys:integer); var elem:sar; begin elem:=pradzia; while(elem^.kitas<>nil)do elem:=elem^.kitas; new(elem^.kitas); elem^.kitas^.atgal:=elem; elem:=elem^.kitas; elem^.duom:=duomenys; elem^.kitas:=nil; end; procedure iterpti_viduje(pradzia:sar; duomenys:integer); var el,elk:sar; begin el:=pradzia; elk:=el^.kitas; new(el^.kitas); el^.kitas^.atgal:=el; elk^.atgal:=el^.kitas; el:=el^.kitas; el^.kitas:=elk; el^.duom:=duomenys; end; procedure naikinti_sar(var pradzia:sar); var s:sar; begin while(pradzia<>nil)do begin s:=pradzia; pradzia:=pradzia^.kitas; dispose(s); end; end; procedure spausdinti_sar(pradzia:sar); begin writeln('Spausdiname: '); while pradzia<>nil do begin write(pradzia^.duom,' '); pradzia:=pradzia^.kitas; end; writeln(); end; procedure rusiuoti (var pradzia:sar); var s1,s2:sar; nesurusiuotas:boolean; begin nesurusiuotas:=true; while((nesurusiuotas)and(pradzia<>nil))do begin s1:=pradzia; s2:=s1^.kitas; nesurusiuotas:=false; while(s2<>nil)do begin if(s1^.duom>s2^.duom) then begin s1^.kitas:=s1^.kitas^.kitas; if(s1^.kitas<>nil)then s1^.kitas^.atgal:=s1; s2^.kitas:=s1; s2^.atgal:=s1^.atgal; if(s2^.atgal<>nil)then s2^.atgal^.kitas:=s2; s1^.atgal:=s2; nesurusiuotas:=true; s2:=s1^.kitas; end else begin s1:=s1^.kitas; s2:=s2^.kitas; end; end; while(s1^.atgal<>nil)do begin s1:=s1^.atgal; pradzia:=s1; end; end; end; var sarasas:sar; selection:integer; duom:integer; begin sukurti_sar(sarasas); writeln('1)Iterpti elementa saraso pradzioj'); writeln('2)Iterpti elementa saraso viduje'); writeln('3))Iterpti elementa saraso pabaigoj'); writeln; write('Kur iterpti elementa? - '); readln(selection); writeln; case selection of 1: begin writeln('iveskite reiksme, kuria norite iterpti'); readln(duom); iterpti_pr(sarasas,duom); end; 2:begin writeln('iveskite reiksme, kuria norite iterpti'); readln(duom); iterpti_viduje(sarasas,duom); end; 3:begin writeln('iveskite reiksme, kuria norite iterpti'); readln(duom); iterpti_pb(sarasas,duom); end; end; rusiuoti(sarasas); spausdinti_sar(sarasas); naikinti_sar(sarasas); end. Вообщем, Си я не понимаю, это всё, что я смогла сделать (ниже). Может кто может помочь? Код #include <stdio.h> #include <stdlib.h> typedef struct el { int duom; struct el *kitas, *atgal; } el; void sukurti_sar (struct el **pr, struct el **pb) { struct el *g, *temp; int x; printf ("Ivesk sveikus skaicius. Pabaigai spausk 0"); *pr = NULL; *pb = NULL; scanf ("%d", &x); while (x!=0) { if (pr==NULL) { g = (struct el*) malloc(sizeof(struct el)); g->duom = x; g->kitas = NULL; g->atgal = NULL; *pr = g; } else { temp = (struct el *) malloc(sizeof(struct el)); g->kitas = temp; temp->atgal=g; g = temp; g->duom = x; } scanf("%d", x); } printf("Sarasas sukurtas"); } void iterpti_pr (struct el *pr, int x ) { struct el *elem; elem = (struct el *) malloc(sizeof(struct el)); elem->duom = x; elem->kitas = pr; pr->atgal = elem; elem->atgal = NULL; pr = elem; } void iterpti_pb (struct el *pr; int *duomenys) { struct el *elem; elem = pr; while (elem->kitas != NULL) { elem = elem->kitas; elem->kitas = (struct el *) malloc(sizeof(struct el)); elem->kitas->atgal = elem; elem = elem->kitas; elem->duom = duomenys; elem->kitas = NULL; } void iterpti_viduje (struct el *pr; int duomenys) { stuct el *elem, *elemk; elem = pr; elemk = elem->kitas; elem->kitas = (struct el *) malloc(sizeof(struct el)); elem->kitas->atgal = elem; elemk->atgal = elem->kitas; elem = elem->kitas; elem->kitas = elemk; elem->duom = duomenys; } void naikinti_sar (struct el **pr) { struct el *s; while (*pr !=NULL) { s = pr; pr = pr->kitas; free(s); } } void spausdinti_sar (struct el *el) { printf("Spausdiname: "); while (pr != NULL) { printf (pr->duom, " "); pr = pr->kitas; } scanf(); } void rusiuoti (struct el **pr) { struct el *s1, *s2; nesurusiuotas == 0; { nesurusiuotas == 1; while ((nesurusiuotas)and(pr !=NULL)) { s1 = pr; s2 = s1->kitas; nesurusiuotas == 0; while (s2 != NULL) { if(s1->duom > s2->duom) { s1->kitas = s1->kitas->kitas; if(s1->kitas !=NULL) s1->kitas->atgal = s1; s2->kitas = s1; s2->atgal = s1->atgal; if(s2->atgal !=NULL) s2->atgal->kitas = s2; s1->atgal = s2; nesurusiuotas == 1; s2 = s1->kitas; } else { s1 = s1->kitas; s2 = s2->kitas; } } while (s1->atgal != NULL) { s1 = s1->atgal; pr = s1; } } } void showmenu() { puts("1) Iterpti elementa saraso pradzioj\n"); puts("2) Iterpti elementa saraso viduje\n"); puts("3) Iterpti elementa saraso pabaigoj\n"); puts("Kur iterpti elementa? - "); } int main() { struct el *pr, *pb; int *x, *duomenys; int selection; do { sukurti_sar ( &pr ); showmenu(); scanf("%d", &selection); puts("\n"); switch(selection) { case 1: iterpti_pr ( &pr, &x ); break; case 2: iterpti_viduje ( &pr, &duomenys); break; case 3: iterpti_pb (&pr, &duomenys); break; } } while (selection != 3); return 0; rusiuoti (&pr ); spausdinti_sar ( pr ); naikinti_sar ( &pr ); return 0; } |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
А я язык, на котором это все написано - не понимаю... И разбираться, что такое kitas, а что такое atgal - не имею ни малейшего желания... Ясно, что это ссылка, а вот куда?
Сообщение отредактировано: volvo - 15.04.2007 17:23 |
sasha. |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 5 Пол: Женский Реальное имя: Aleksandra Репутация: ![]() ![]() ![]() |
|
sasha. |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 5 Пол: Женский Реальное имя: Aleksandra Репутация: ![]() ![]() ![]() |
Код program dvipLIST; uses crt; type sar=^el; el=record data:integer; next:sar; back:sar; end; procedure makeNew (var first:sar); var x:integer; g,temp:sar; begin writeln('Insert integer numbner. To finish press 0'); readln(x); while x<>0 do begin if first=nil then begin new(g); g^.data:=x; g^.next:=nil; g^.back:=nil; first:=g; end else begin new(temp); g^.next:=temp; temp^.back:=g; g:=temp; g^.data:=x; end; readln(x); end; writeln('LIST is done'); end; procedure addbefore(var first:sar; x:integer); var elem:sar; begin new(elem); elem^.data:=x; elem^.next:=first; first^.back:=elem; elem^.back:=nil; first:=elem; end; procedure addlast(first:sar; data1:integer); var elem:sar; begin elem:=first; while(elem^.next<>nil)do elem:=elem^.next; new(elem^.next); elem^.next^.back:=elem; elem:=elem^.next; elem^.data:=data1; elem^.next:=nil; end; procedure addtocenter(first:sar; data1:integer); var el,elk:sar; begin el:=first; elk:=el^.next; new(el^.next); el^.next^.back:=el; elk^.back:=el^.next; el:=el^.next; el^.next:=elk; el^.data:=data1; end; procedure delete(var first:sar); var s:sar; begin while(first<>nil)do begin s:=first; first:=first^.next; dispose(s); end; end; procedure print(first:sar); begin writeln('Spausdiname: '); while first<>nil do begin write(first^.data,' '); first:=first^.next; end; writeln(); end; procedure sort (var first:sar); var s1,s2:sar; nonsort:boolean; begin nonsort:=true; while((nonsort)and(first<>nil))do begin s1:=first; s2:=s1^.next; nonsort:=false; while(s2<>nil)do begin if(s1^.data>s2^.data) then begin s1^.next:=s1^.next^.next; if(s1^.next<>nil)then s1^.next^.back:=s1; s2^.next:=s1; s2^.back:=s1^.back; if(s2^.back<>nil)then s2^.back^.next:=s2; s1^.back:=s2; nonsort:=true; s2:=s1^.next; end else begin s1:=s1^.next; s2:=s2^.next; end; end; while(s1^.back<>nil)do begin s1:=s1^.back; first:=s1; end; end; end; var LIST:sar; selection:integer; data:integer; begin makeNew(LIST); writeln('1)Insert element to the beginning'); writeln('2)Insert to center '); writeln('3))Insert to the end.'); writeln; write('Where to insert? - '); readln(selection); writeln; case selection of 1: begin writeln('insert the value'); readln(data); addbefore(LIST,data); end; 2:begin writeln('insert the value'); readln(data); addtocenter(LIST,data); end; 3:begin writeln('insert the value'); readln(data); addlast(LIST,data); end; end; sort(LIST); print(LIST); delete(LIST); end. |
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 12:05 |