PraktikumProgrammierung1:Aufgabe 5
Aus Tudwiki
Version vom 19. Januar 2005, 10:04 Uhr von 141.76.1.122 (Diskussion)
warte.c :
/* 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
#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
#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; }
}