#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef struct osoba
{
char nazwisko[ 32 ] ;
char imie[ 24 ] ;
struct osoba * nxt,* prev;
} psymbol,* ppsymbol;
ppsymbol sym_end= NULL ,sym_beg= NULL ;
int compare( ppsymbol a,ppsymbol b)
{
int v= strcmp ( a- > nazwisko,b- > nazwisko) ;
return v? v: strcmp ( a- > imie,b- > imie) ;
}
void DodajOsobe( ppsymbol data) // data już wprowadzone, sprawdzone, wypełnione
{
ppsymbol next,prev;
for ( next= sym_beg,prev= 0 ; ( next) && ( compare( data,next) > 0 ) ; next= prev- > nxt) prev= next;
data- > prev= prev;
data- > nxt= next;
//if(prev) prev->nxt=data; else sym_beg=data; // specjalnie dla Furious Programming zamieniam dwa wiersze na jeden i bez warunku
//if(next) next->prev=data; else sym_end=data; // specjalnie dla Furious Programming zamieniam dwa wiersze na jeden i bez warunku
( prev? prev- > nxt: sym_beg) = ( next? next- > prev: sym_end) = data;
}
void show( )
{
ppsymbol i;
for ( i= sym_beg; i; i= i- > nxt) printf ( "%s %s\n " ,i- > nazwisko,i- > imie) ;
printf ( "\n " ) ;
}
ppsymbol newOne( const char * nazwisko,const char * imie)
{
ppsymbol tmp;
tmp= ( ppsymbol) malloc ( sizeof ( psymbol) ) ;
strcpy ( tmp- > nazwisko,nazwisko) ;
strcpy ( tmp- > imie,imie) ;
return tmp;
}
int main( )
{
DodajOsobe( newOne( "Kowalski" ,"Jan" ) ) ; show( ) ;
DodajOsobe( newOne( "Xinski" ,"Adam" ) ) ; show( ) ;
DodajOsobe( newOne( "Sikorski" ,"Piotr" ) ) ; show( ) ;
DodajOsobe( newOne( "Einstein" ,"Albert" ) ) ; show( ) ;
DodajOsobe( newOne( "Einstein" ,"Robert" ) ) ; show( ) ;
DodajOsobe( newOne( "Kowalski" ,"Arkadiusz" ) ) ; show( ) ;
return 0 ;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBzdHJ1Y3Qgb3NvYmEKICB7CiAgIGNoYXIgbmF6d2lza29bMzJdOwogICBjaGFyIGltaWVbMjRdOwogICBzdHJ1Y3Qgb3NvYmEgKm54dCwqcHJldjsKICB9IHBzeW1ib2wsKnBwc3ltYm9sOwoKcHBzeW1ib2wgc3ltX2VuZD1OVUxMLHN5bV9iZWc9TlVMTDsKCmludCBjb21wYXJlKHBwc3ltYm9sIGEscHBzeW1ib2wgYikKICB7CiAgIGludCB2PXN0cmNtcChhLT5uYXp3aXNrbyxiLT5uYXp3aXNrbyk7CiAgIHJldHVybiB2P3Y6c3RyY21wKGEtPmltaWUsYi0+aW1pZSk7CiAgfQogCnZvaWQgRG9kYWpPc29iZShwcHN5bWJvbCBkYXRhKSAvLyBkYXRhIGp1xbwgd3Byb3dhZHpvbmUsIHNwcmF3ZHpvbmUsIHd5cGXFgm5pb25lCiAgewogICBwcHN5bWJvbCBuZXh0LHByZXY7CiAgIGZvcihuZXh0PXN5bV9iZWcscHJldj0wOyhuZXh0KSYmKGNvbXBhcmUoZGF0YSxuZXh0KT4wKTtuZXh0PXByZXYtPm54dCkgcHJldj1uZXh0OwogICBkYXRhLT5wcmV2PXByZXY7CiAgIGRhdGEtPm54dD1uZXh0OwogICAvL2lmKHByZXYpIHByZXYtPm54dD1kYXRhOyBlbHNlIHN5bV9iZWc9ZGF0YTsgLy8gc3BlY2phbG5pZSBkbGEgRnVyaW91cyBQcm9ncmFtbWluZyB6YW1pZW5pYW0gZHdhIHdpZXJzemUgbmEgamVkZW4gaSBiZXogd2FydW5rdQogICAvL2lmKG5leHQpIG5leHQtPnByZXY9ZGF0YTsgZWxzZSBzeW1fZW5kPWRhdGE7IC8vIHNwZWNqYWxuaWUgZGxhIEZ1cmlvdXMgUHJvZ3JhbW1pbmcgemFtaWVuaWFtIGR3YSB3aWVyc3plIG5hIGplZGVuIGkgYmV6IHdhcnVua3UKICAgKHByZXY/cHJldi0+bnh0OnN5bV9iZWcpPShuZXh0P25leHQtPnByZXY6c3ltX2VuZCk9ZGF0YTsgCiAgfQogIAp2b2lkIHNob3coKQogIHsKICAgcHBzeW1ib2wgaTsKICAgZm9yKGk9c3ltX2JlZztpO2k9aS0+bnh0KSBwcmludGYoIiVzICVzXG4iLGktPm5hendpc2tvLGktPmltaWUpOwogICBwcmludGYoIlxuIik7CiAgfQogIApwcHN5bWJvbCBuZXdPbmUoY29uc3QgY2hhciAqbmF6d2lza28sY29uc3QgY2hhciAqaW1pZSkKICB7CiAgIHBwc3ltYm9sIHRtcDsKICAgdG1wPShwcHN5bWJvbCltYWxsb2Moc2l6ZW9mKHBzeW1ib2wpKTsKICAgc3RyY3B5KHRtcC0+bmF6d2lza28sbmF6d2lza28pOwogICBzdHJjcHkodG1wLT5pbWllLGltaWUpOwogICByZXR1cm4gdG1wOwogIH0KCQppbnQgbWFpbigpCiAgewogICBEb2Rhak9zb2JlKG5ld09uZSgiS293YWxza2kiLCJKYW4iKSk7ICAgc2hvdygpOwogICBEb2Rhak9zb2JlKG5ld09uZSgiWGluc2tpIiwiQWRhbSIpKTsgICAgc2hvdygpOwogICBEb2Rhak9zb2JlKG5ld09uZSgiU2lrb3Jza2kiLCJQaW90ciIpKTsgc2hvdygpOwogICBEb2Rhak9zb2JlKG5ld09uZSgiRWluc3RlaW4iLCJBbGJlcnQiKSk7IHNob3coKTsKICAgRG9kYWpPc29iZShuZXdPbmUoIkVpbnN0ZWluIiwiUm9iZXJ0IikpOyBzaG93KCk7CiAgIERvZGFqT3NvYmUobmV3T25lKCJLb3dhbHNraSIsIkFya2FkaXVzeiIpKTsgc2hvdygpOwogICAKICAgcmV0dXJuIDA7CiAgfQ==