Программа в 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;
}