#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct reservierung {
                      char name[20];
                      char vorname[20];
                      int rnummer;
                      struct reservierung *previous;
                    };

struct reservierung *dummy;
static int nummer = 1;


int schlange_init()
{
 if((dummy=(struct reservierung *)malloc(sizeof(struct reservierung))) != NULL)
  {
   strcpy(dummy->name,"dummy");
   strcpy(dummy->vorname,"dummy");
   dummy->rnummer=0;

   dummy->previous=NULL;
   return 1;
  }
 else
  {
   fprintf(stderr,"Konnte keinen Speicher reservieren!!\n");
   return 0;
  }
}

/*Wir hängen ein neues Element ans Ende der Schlange*/
int put(struct reservierung *neu)
{
 struct reservierung *zeiger;
/*Ist es das 1.Element in der Schlange ?*/
 if(dummy->previous == NULL)
  { /*Es ist das 1. Element*/
   dummy->previous=neu;
   neu->previous=NULL;
   return 1;
  }
/*Es ist nicht das 1. Element*/
 else
  {
   zeiger=dummy;
/*Wir suchen das Ende der Schlange*/
   while(zeiger->previous != NULL)
       zeiger=zeiger->previous;

   zeiger->previous=neu;
   neu->previous=NULL;
   return 1;
  }
}

/*Wir benötige das 1.Element der Liste das wir auch als 1. Eingegeben haben*/
void get()
{
 struct reservierung *zeiger;
/*Ist überhaupt etwas in der Schlange?*/
 if(dummy->previous != NULL)
  { /*Es ist...!*/
   zeiger=dummy->previous;
   dummy->previous=zeiger->previous;
   free(zeiger);
  }
 else
   fprintf(stderr,"Es sind keine Patienten im Wartezimmer.....\n");
}

void eingabe()
{
 struct reservierung *neu;
 char n[20],vn[20];
 int tisch;

 if((neu=(struct reservierung *)malloc(sizeof(struct reservierung))) != NULL)
  {
   printf("Name.....: ");
   strcpy(neu->name,(gets(n)));fflush(stdin);
   printf("Vorname..: ");
   strcpy(neu->vorname,(gets(vn)));fflush(stdin);
   printf("Nummer...: ");
   printf("%d\n",neu->rnummer = nummer++);
   neu->previous=NULL;
   put(neu);
  }
}

void ausgabe()
{
 if(dummy->previous != NULL)
  {
   printf("\n%s, %s Nummer.: %d \n\n",
   dummy->previous->name,dummy->previous->vorname,
   dummy->previous->rnummer);
   get();
  }
 else
   printf("Keine Patienten im Wartezimmer vorhanden!!!\n");
}


int main()
{
 int wahl;

 schlange_init();

 do {
      printf("-1- Reservierung eingeben\n");
      printf("-2- Nächster Patient\n");
      printf("-3- Programmende\n\n");
      printf("Ihre Wahl : ");
      scanf("%d",&wahl);
      fflush(stdin);

      switch(wahl)
       {
         case 1 : eingabe();
                      break;
         case 2 : ausgabe();
                       break;
         case 3 : if(dummy->previous != NULL)
                       {
                        printf("Es sind noch Patienten im Wartezimmer!!!\n");
                        wahl=4;
                        }
                      break;
         case 4 : break;
         default: printf("Falsche Eingabe!!\n\n");
       }
     }while(wahl != 3);
 printf("\n\n\t\tProgrammende\n");
 return 0;
}