MA-3
This commit is contained in:
parent
7b1b698fd3
commit
8a31953c27
42
josephus.c
Normal file
42
josephus.c
Normal file
@ -0,0 +1,42 @@
|
||||
/*--- #includes ------------------------------------------------------*/
|
||||
#define _CRT_SECURE_NO_WARNINGS //VC++: keine scanf() Warnungen
|
||||
#include <stdio.h>
|
||||
#include "queue.h"
|
||||
|
||||
/*--- #defines -------------------------------------------------------*/
|
||||
|
||||
/*--- Datentypen (typedef) -------------------------------------------*/
|
||||
|
||||
/*--- Prototypen lokaler Funktionen ----------------------------------*/
|
||||
|
||||
/*--- main -----------------------------------------------------------*/
|
||||
int main(void)
|
||||
{
|
||||
int n, z, i=1, nr;
|
||||
|
||||
do {
|
||||
printf("Wie viele Personen: ");
|
||||
nr = scanf("%d", &n); getchar();
|
||||
} while (nr != 1 || n < 0);
|
||||
do {
|
||||
printf("Wie vielte ist auszusondern: ");
|
||||
nr = scanf("%d", &z); getchar();
|
||||
} while (nr != 1 || z < 0);
|
||||
|
||||
for (i = 1; i <= n; i++) // Queue füllen
|
||||
put(i);
|
||||
|
||||
while (!isEmpty()) {
|
||||
for (i = 1; i < z; i++) { // z-1 Zahlen aus Queue lesen
|
||||
if (put(get()) == FALSE) { // und wieder am Ende der Queue einfügen
|
||||
fprintf(stderr, "Fehler beim Einfügen\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
printf("%d, ", get()); // z. Zahl aus Queue lesen und ausgeben
|
||||
// Diese Zahl nicht mehr einfügen
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
return 0;
|
||||
}
|
100
queue.c
Normal file
100
queue.c
Normal file
@ -0,0 +1,100 @@
|
||||
/*--- #includes ------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "queue.h"
|
||||
|
||||
/*--- #defines -------------------------------------------------------*/
|
||||
|
||||
/*--- Lokale Datentypen (typedef) ------------------------------------*/
|
||||
|
||||
Jose* head = NULL;
|
||||
Jose* tail = NULL;
|
||||
|
||||
/*--- Modulglobale static Variablen ----------------------------------*/
|
||||
|
||||
/*--- Prototypen lokaler Funktionen ----------------------------------*/
|
||||
|
||||
/*--- Funktionsdefinitionen ------------------------------------------*/
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Einfuegen in Liste
|
||||
* Parameter:
|
||||
* zahl fügt die übergebene Zahl 'zahl' am Ende der Liste ein
|
||||
* Return Wert:
|
||||
* TRUE wenn noch genug Speicherplatz vorhanden
|
||||
* FALSE wenn kein Speicherplatz mehr allokiert werden konnte
|
||||
*--------------------------------------------------------------------*/
|
||||
Bool put(int zahl)
|
||||
{
|
||||
Jose* j = (Jose*)malloc(sizeof(Jose));
|
||||
|
||||
if(!j){
|
||||
printf("Es kann kein Speicher mehr allokiert werden!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
j->value = zahl;
|
||||
j->next = NULL;
|
||||
j->prev = tail;
|
||||
|
||||
if(tail)
|
||||
tail->next = j;
|
||||
else
|
||||
head = j;
|
||||
|
||||
tail = j;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Auslesen aus Liste
|
||||
* Parameter:
|
||||
* keine
|
||||
* Return Wert:
|
||||
* Zahl am Anfang der Liste oder aber QLEER, wenn Liste leer ist.
|
||||
*--------------------------------------------------------------------*/
|
||||
int get(void)
|
||||
{
|
||||
int valueHead;
|
||||
Jose* tmp;
|
||||
|
||||
if(head == NULL)
|
||||
return QLEER;
|
||||
|
||||
tmp = head;
|
||||
valueHead = tmp->value;
|
||||
head = head->next;
|
||||
|
||||
if (head == NULL) {
|
||||
tail = NULL;
|
||||
} else {
|
||||
head->prev = NULL;
|
||||
}
|
||||
free(tmp);
|
||||
return valueHead;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Pruefen der Liste
|
||||
* Parameter:
|
||||
* keine
|
||||
* Return Wert:
|
||||
* liefert TRUE, wenn Queue leer ist, sonst FALSE
|
||||
*--------------------------------------------------------------------*/
|
||||
Bool isEmpty(void)
|
||||
{
|
||||
if(head == NULL)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*int main(){
|
||||
put(69);
|
||||
put(70);
|
||||
put(80);
|
||||
get();
|
||||
get();
|
||||
get();
|
||||
get();
|
||||
}*/
|
57
queue.h
Normal file
57
queue.h
Normal file
@ -0,0 +1,57 @@
|
||||
#ifndef QUEUE_H
|
||||
#define QUEUE_H
|
||||
|
||||
/*--- #includes ------------------------------------------------------*/
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*--- #defines -------------------------------------------------------*/
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#define QLEER INT_MIN
|
||||
|
||||
/*--- Datentypen (typedef) -------------------------------------------*/
|
||||
typedef int Bool;
|
||||
|
||||
typedef struct Jose {
|
||||
int value;
|
||||
struct Jose* next;
|
||||
struct Jose* prev;
|
||||
} Jose;
|
||||
|
||||
extern Jose* head;
|
||||
extern Jose* tail;
|
||||
/*--- Prototypen globaler Funktionen ---------------------------------*/
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Einfuegen in Liste
|
||||
* Parameter:
|
||||
* zahl fügt die übergebene Zahl 'zahl' am Ende der Liste ein
|
||||
* Return Wert:
|
||||
* TRUE wenn noch genug Speicherplatz vorhanden
|
||||
* FALSE wenn kein Speicherplatz mehr allokiert werden konnte
|
||||
* Hinweis:
|
||||
* - dynamische Verwaltung von Speicher muss mit malloc() und free()
|
||||
* durchgeführt werden; dynamische Arrays sind nicht erlaubt !!!
|
||||
*--------------------------------------------------------------------*/
|
||||
Bool put(int zahl);
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Auslesen aus Liste
|
||||
* Parameter:
|
||||
* keine
|
||||
* Return Wert:
|
||||
* Zahl am Anfang der Liste oder aber QLEER, wenn Liste leer ist.
|
||||
*--------------------------------------------------------------------*/
|
||||
int get(void);
|
||||
|
||||
/*--------------------------------------------------------------------*\
|
||||
* Pruefen der Liste
|
||||
* Parameter:
|
||||
* keine
|
||||
* Return Wert:
|
||||
* liefert TRUE, wenn Queue leer ist, sonst FALSE
|
||||
*--------------------------------------------------------------------*/
|
||||
Bool isEmpty(void);
|
||||
|
||||
#endif /*QUEUE_H*/
|
Loading…
x
Reference in New Issue
Block a user