<br />
<b>Warning</b>:  Undefined array key "HTTP_REFERER" in <b>/var/www/vhosts/web61970.ssd-space.de/phi.pf-control.de/uni/download.php</b> on line <b>13</b><br />
#include <iostream>
#include <string>
using namespace std;

struct adr{
   string name;
   string adresse;
   adr *next;   
   adr *anker;
   adr(){name="";adresse="";next=0;anker=0;}
   void insertafter(string nname, string nadresse){ //fügt hinter aktueller Position ein
      if(nname==""||nadresse=="")return; //Leere Einträge sind unlogisch
      if(name!=""){
         adr *zwi=new adr();
         zwi->name=nname;
         zwi->adresse=nadresse;
         zwi->next=next;
         zwi->anker=anker;
         next=zwi;
      }else{
         name=nname;
         adresse=nadresse;
         next=0;
      }
      if(anker==0)anker=this;
   }
   void insertbefore(string nname, string nadresse){ //fügt an aktueller Position ein
      if(nname==""||nadresse=="")return; //Leere Einträge sind unlogisch
      adr *zwi=new adr();
      zwi->name=name;
      zwi->adresse=adresse;
      zwi->next=next;
      zwi->anker=anker;
      name=nname;
      adresse=nadresse;
      next=zwi;
      if(anker==0)anker=this;
   }
   void append(string nname, string nadresse){ //fügt am Ende ein
      if(nname==""||nadresse=="")return; //Leere Einträge sind unlogisch
      adr *akt=this;
      while(akt->next){
         akt=akt->next;   
      }
      akt->insertafter(nname,nadresse);
      if(anker==0)anker=this;
   }
   void insertat(string nname, string nadresse, int index){
      if(nname==""||nadresse=="")return; //Leere Einträge sind unlogisch
      int i=0;
      adr *akt=this;
      while(akt->next){
         i++;
         if(index==i-1){akt->insertbefore(nname,nadresse);return;}
         akt=akt->next;   
      }
      akt->insertbefore(nname,nadresse);
   }
   int IDByName(string nname){ //Suche name ab aufrufendes element
      if(nname=="")return -1;
      int i=0;
      adr *akt=this;
      while(akt){
         if(akt->name==nname)return i;
         akt=akt->next;   
         i++;
      }
      return -1; 
   }
   int IDByAdresse(string nadresse){//Suche adresse ab aufrufendes element
      if(nadresse=="")return -1;
      int i=0;
      adr *akt=this;
      while(akt){
         if(akt->adresse==nadresse)return i;
         akt=akt->next;   
         i++;;
      }
      return -1; 
   }
   adr* adrById(int id){
      if(id<0)return 0;
      int i=0;
      adr *akt=this;
      while(akt){
         if(id==i)return akt;
         akt=akt->next;   
         i++;
      }
      return 0; 
   }
   adr* adrByAdresse(string nadresse){//Suche adresse ab aufrufendes element
      if(nadresse=="")return 0;
      int i=0;
      adr *akt=this;
      while(akt){
         if(akt->adresse==nadresse)return akt;
         akt=akt->next;   
         i++;
      }
      return 0; 
   }
   adr* adrByName(string nname){//Suche name ab aufrufendes element
      if(nname=="")return 0;
      int i=0;
      adr *akt=this;
      while(akt){
         if(akt->name==nname)return akt;
         akt=akt->next;   
         i++;
      }
      return 0; 
   }
   void del(){//löscht aktuelles Element
      if(!this)return;
      if(next){
         name=next->name;
         adresse=next->adresse;
         //delete next;         
         if(!next->next)next=0;else next=next->next;
      }else{
         if(anker==0)return;
         if(anker->next==0){anker=0;return;}
         adr *akt=anker;
         while(akt->next->next!=0)akt=akt->next;
         akt->next=0;
      }
   }
};
int main()
{      
   adr *adressbuch=new adr();
 
   adressbuch->append("person1","Adresse1"); //person 1 ans Ende der Liste (pos 0)
   adressbuch->append("person2","Adresse2"); //person 2 ans Ende der Liste (pos 1)
   adressbuch->append("person3","Adresse3"); //person 3 ans Ende der Liste (pos 2)
   adressbuch->insertafter("person4","Adresse4"); //person 4 hinter erstes Element (pos 1)
   adressbuch->insertbefore("person5","Adresse5"); //person 5 vor erstes Element (pos 0)
   adressbuch->insertat("person6","Adresse6",0); //person 6 an pos 0
   adressbuch->adrById(4)->insertbefore("person7","Adresse7"); //person 7 vor 4. Element (pos 4)
   adressbuch->del(); //löscht erstes Element
   adressbuch->adrById(4)->del();//löscht 4. Element
   adressbuch->adrByName("person6")->del();//löscht person 6
      
   adr *akt=adressbuch;
   cout<<"Adressbuch:"<<endl;
   while(akt){
      cout<<akt->name<<"-"<<akt->adresse<<endl;
      akt=akt->next;
   };
   cout<<endl<<"Suchen:"<<endl;
   cout<<"ID von Name \"person1\": "<<adressbuch->IDByName("person1")<<endl;
   cout<<"ID von Adresse \"Adresse2\": "<<adressbuch->IDByAdresse("Adresse2")<<endl;
   cout<<"Daten von ID \"4\": "<<adressbuch->adrById(4)->name<<"-"<<adressbuch->adrById(4)->adresse<<endl;
   cout<<"Daten von Adresse \"Adresse5\": "<<adressbuch->adrByAdresse("Adresse5")->name<<endl;
   cout<<"Daten von Name \"person4\": "<<adressbuch->adrByName("person4")->adresse<<endl;
   cout<<endl;
   system("pause");
   return EXIT_SUCCESS;
}
 
