PraktikumProgrammierung1:Aufgabe 5

Aus Tudwiki
Wechseln zu: Navigation, Suche

warte.c :[Bearbeiten]

/* Warteschlange */

#include <stdio.h>
#include <stdlib.h>
#include "queues.h"

int main() {

 queue ws = createqueue();
 int i,x;
 printf("      Eingabe <0 : Programmende\n");
 printf("      Eingabe  0 : Element entnehmen\n");
 printf("      Eingabe >0 : Element anfuegen\n\n");
 do
 { printf(" Eingabe: ");
   scanf(" %i", &i);
   if (i == 0)              /* Element entnehmen */
     {
               if (leer(ws))
                 printf(" Warteschlange ist leer !\n");
               else
               {
                       getqueue(&ws,&x);
                       printf(" ->  %i\n", x);
               }
     }
   else if (i > 0)          /* Element anfuegen */
   {
           if (voll(ws))
                   printf(" Warteschlange ist voll !\n");
           else
                   appendqueue(&ws,i);
   }
 } while (i>=0);            /* sonst Programmende */
 printf(" Programmende !\n ");
 return 0;

}

queues.h[Bearbeiten]

#ifndef QUEUE_H
  #define QUEUE_H

 #define MAXLEN 10
 typedef struct ele *queue;
 queue createqueue();
 int leer(queue q);
 int voll(queue q);
 void appendqueue(queue *q, int i);
 void getqueue(queue *q, int *i);
#endif

queues.c[Bearbeiten]

#include <stdlib.h>
#include "queues.h"

typedef struct ele

             { int wert;
               queue next;
              } q_ele;

/* Loesung OHNE Zusatzaufgaben */

queue createqueue() {

       queue q;
       q=(queue)malloc(sizeof(q_ele)); /* Implementierung als Ring mit Dummy  */
       q->wert=0; /* Nutzung als Anzahl der Ringelemente  */
       q->next=q;
       return q;

}


int leer(queue q) {

       return q == q->next;

}


int voll(queue q) {

       return q->next->wert >= MAXLEN;

}


void appendqueue(queue *q, int i) {

       queue neu;
       neu=(queue)malloc(sizeof(q_ele));
       neu->wert=i;
       neu->next=(*q)->next;
       (*q)->next=neu;
       *q=neu;
       (*q)->next->wert++;

} void getqueue(queue *q, int *i) {

       queue dummy=(*q)->next, alt;
       alt=dummy->next;
       *i=dummy->next->wert;
       dummy->next=dummy->next->next;
       free(alt);
       dummy->wert--;
       if(dummy->wert==0)
       {
               dummy->next=dummy;
               *q=dummy;
       }

}