немного модифицировал данную на форуме программу по работе с односторонними списками, перевел на нужный язык..., добывил несколько процедур. Нужно написать аналогичную программу в Си. В си программировал очень редко, поэтому незнаю пунктуации, и некоторых вещей, кому не сложно, помогите пожалуйста, вот код программы в паскале( все что написано в write не нужно писать... дополню):
Код
program 1;
uses CRT;
type pt = ^elem;
elem = record
info : byte;
next : pt;
end;
//******************************************************************************
function getprelastel (list:pt):pt;
var nextel:pt;
begin
if (list<>NIL) then
begin
nextel:=list;
repeat
list:=nextel;
if (list^.next<>NIL) then
nextel:=list^.next;
until (nextel^.next=NIL);
getprelastel:=list;
end
else
getprelastel:=NIL;
end;
//______________________________________________________________________________
//******************************************************************************
function getlastel (list:pt):pt;
begin
if (list<>NIL) then
begin
while (list^.next<>NIL) do
list:=list^.next;
getlastel:=list;
end
else
getlastel:=NIL;
end;
//______________________________________________________________________________
//******************************************************************************
function searchel (list:pt;info:byte):pt;
begin
if (list<>NIL) then
begin
while ((list^.next<>NIL) and (list^.info<>info)) do
list:=list^.next;
if (list^.info<>info) then
searchel:=NIL
else
searchel:=list;
end
else
begin
searchel:=NIL;
end;
end;
//______________________________________________________________________________
//******************************************************************************
function searchpreel (list:pt;info:byte):pt;
var nextel:pt;
begin
if (list<>NIL) then
begin
nextel:=list;
repeat
list:=nextel;
if (list^.next<>NIL) then
nextel:=list^.next;
until ((nextel^.next=NIL) or (nextel^.info=info));
if (nextel^.info<>info) or (nextel=list) then
searchpreel:=NIL
else
searchpreel:=list;
end
else
begin
searchpreel:=NIL;
end;
end;
//______________________________________________________________________________
//******************************************************************************
function getelem(elname:string):byte;
var ret:byte;
begin
write('Iveskite ',elname,' : ');
readln(ret);
getelem:=ret;
end;
//______________________________________________________________________________
//******************************************************************************
procedure addtobegin (var list:pt;info:byte);
var newelem:pt;
begin
new(newelem);
newelem^.info:=info;
newelem^.next:=list;
list:=newelem;
end;
//______________________________________________________________________________
//******************************************************************************
procedure addafter (listel:pt;info:byte);
var newelem,temp:pt;
begin
temp:=searchel(listel, getelem('Ieskomo elemento reiksme'));
if ((listel<>NIL) and (temp<>NIL)) then
begin
new(newelem);
newelem^.info:=info;
newelem^.next:=temp^.next;
temp^.next:=newelem;
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure addtoend (var list:pt;info:byte);
begin
if (list=NIL) then
addtobegin(list,info)
else
addafter(getlastel(list),info);
end;
//______________________________________________________________________________
//******************************************************************************
procedure addbefore (listel:pt;info:byte);
var newelem, temp:pt;
begin
temp:=searchel(listel, getelem('Ieskomo elemento reiksme'));
if ((listel<>NIL) and (temp<>NIL)) then
begin
new(newelem);
newelem^.info:=temp^.info;
temp ^.info:=info;
newelem^.next:=temp^.next;
temp^.next:=newelem;
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure delfirstel(var list:pt);
var temp:pt;
begin
if (list<>NIL) then
begin
temp:=list;
list:=list^.next;
dispose(temp);
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure dellastel(var list:pt);
var temp:pt;
begin
if (list<>NIL) then
if (list^.next=NIL) then
delfirstel(list)
else
begin
temp:=getprelastel(list);
dispose(temp^.next);
temp^.next:=NIL;
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure delel(var list:pt;el:pt);
var temp,temp1 :pt;
begin
temp1:=searchel(list, getelem('Pasalinamo elemento reikshme'));
if ((list<>NIL) and (el<>NIL) and (temp1<>NIL)) then
begin
if (temp1^.next=NIL) then
if (list^.next=NIL) then
delfirstel(list)
else
dellastel(list)
else
begin
temp:=temp1^.next;
temp1^.info:=temp^.info;
temp1^.next:=temp^.next;
dispose(temp);
end;
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure delbefore(var list:pt;info:byte);
var temp:pt;
begin
if (list<>NIL) then
begin
temp:=searchpreel(list,info);
delel(list,temp);
end;
end;
procedure delafter(var list:pt;info:byte);
var temp:pt;
begin
if (list<>NIL) then
begin
temp:=searchel(list,info);
temp:=temp^.next;
delel(list,temp)
end;
end;
//______________________________________________________________________________
//******************************************************************************
procedure printlist (list:pt);
begin
clrscr;
if (list=NIL) then
writeln('Sarasas Tuscias!')
else
while (list<>NIL) do
begin
write(list^.info);
list:=list^.next;
if (list<>NIL) then
write(',')
else
write('.');
end;
readkey;
end;
//______________________________________________________________________________
//******************************************************************************
procedure checkel(list:pt;info:byte);
begin
if (searchel(list,info)<>NIL) then
writeln('Elementas ',info,' egzistuoja.')
else
writeln('Elemento ',info,' nera.');
readkey;
end;
//_____________________________________________________________________________
procedure listclear ( var list: pt );
var
templist: pt;
begin
while list <> nil do
begin
templist :=list;
list:=list^.Next;
dispose(templist);
end;
end;
procedure showmenu;
begin
clrscr;
Writeln('1) Irasyti elementa i saraso pradzia');
Writeln('2) Irasyti elementa i saraso pabaiga');
Writeln('3) Pasalinti pirma elementa is saraso');
Writeln('4) Pasalinti paskutini elementa is saraso');
Writeln('5) Patinkrinti ar egzistuoja nurodytas elementas');
Writeln('6) Pasalinti nurodyta elementa');
Writeln('7) Iterpti elementa po nurodyto');
Writeln('8) Iterpti elementa pries nurodyta');
Writeln('9) Pasalinti elementa po nurodyto');
Writeln('10) Pasalinti elementa pries nurodyta');
Writeln('11) Isspausdinti sarasa');
Writeln('12) Istrinti sarasa');
Writeln('13) Iseiti is programos');
Writeln;
Write(' Jusu pasirinkimas : ');
end;
var root: pt;
selection : byte;
begin
root:=NIL;
repeat
showmenu;
readln(selection);
writeln;
case selection of
1: addtobegin(root,getelem('elemento reiksme'));
2: addtoend(root,getelem('elemento reiksme'));
3: delfirstel(root);
4: dellastel(root);
5: checkel(root,getelem('Ieskomo elemento reiksme'));
6: delel(root,root);
7: addafter(root,getelem('Iterpiamo elemento reiksme'));
8: addbefore(root,getelem('Iterpiamo elemento reiksme'));
9: delafter(root,getelem('Ieskomo elemento reiksme'));
10: delbefore(root,getelem('Ieskomo elemento reiksme'));
11: printlist(root);
12: listclear(root);
13: clrscr;
end;
until selection=13;
end.