Browse Source

Added files

master
Rainer Hihn 4 years ago
parent
commit
9891b2a946
  1. 102
      pointStack.c
  2. 40
      pointStack.h
  3. 58
      stackmain.c

102
pointStack.c

@ -0,0 +1,102 @@
/**
* Datei: pointStack.c
* Funktionen vom Stack Programm
*
* Rainer Hihn
*/
#include "pointStack.h"
/**
* globale Variable, die auf das
* oberste Element des Stacks zeigt
*/
STACK_POINT_PTR stackTop = NULL;
void push(POINT pushPoint)
{
/**
* temporaere Variable
*/
STACK_POINT_PTR stackPoint = (STACK_POINT_PTR) malloc(sizeof(STACK_POINT));
/**
* debugging
* printf("%d \n", stackPoint);
*/
/**
* Abbruchbedingung, falls zu wenig Speicher zur Verfuegung steht
*/
if(stackPoint == NULL)
{
printf("nicht genug Speicher zur Verfuegung ... Ende \n");
exit(1);
}
/*
* Punnkt speichern und
* stackTop auf den aktuellen Wert setzen
*/
stackPoint->p = pushPoint;
stackPoint->next = stackTop;
stackTop = stackPoint;
return;
}
POINT pop()
{
/**
* stackTop und nextStackTop
* zwischenspeichern
*/
STACK_POINT firstStackPoint = *stackTop;
/**
* Speicher vom obersten
* Stack-Element freigeben
*/
/**
* debugging
* printf("%d \n", stackTop);
*/
free(stackTop);
/**
* stackTop auf das ehemals
* zweite Element des Stacks setzen
*/
stackTop = firstStackPoint.next;
/**
* Punkte vom ehemals ersten Element
* zurueckgeben
*/
return firstStackPoint.p;
}
int isEmpty()
{
/**
* wenn next auf NULL zeigt
* dann ist dies das letzte Element
* des Stacks
* und es wird '1' zurueckgegeben
*/
if(stackTop == NULL)
{
return 1;
}
else {
return 0;
}
}
void printStackElement(POINT aPoint)
{
printf("Punkt x: %f, Punkt y: %f, Punkt z: %f \n", aPoint.rX, aPoint.rY, aPoint.rZ);
return;
}

40
pointStack.h

@ -0,0 +1,40 @@
/**
* Datei: pointStack.h
* Headerdatei fuer Stack Programm
*
* Rainer Hihn
*/
#include <stdio.h>
#include <stdlib.h>
/*
* structs
*/
/*
* struct fuer die Koordinaten
*/
struct point
{
float rX;
float rY;
float rZ;
};
typedef struct point POINT;
struct stackPoint
{
POINT p;
struct stackPoint *next;
};
typedef struct stackPoint STACK_POINT;
typedef STACK_POINT *STACK_POINT_PTR;
/*
* Funktionen
*/
void push(POINT pushPoint);
POINT pop();
int isEmpty();
void printStackElement(POINT aPoint);

58
stackmain.c

@ -0,0 +1,58 @@
/***********************
* Datei: stackmain.c
* Speichern einer Menge von Punkten
*
* Rainer Hihn
*/
#include "pointStack.h"
void exit(int);
POINT readPoint()
{
POINT userPoint;
printf("Bitte x-Koordinate eingeben \n");
scanf("%62f", &userPoint.rX);
printf("Bitte y-Koordinate eingeben \n");
scanf("%62f", &userPoint.rY);
printf("Bitte z-Koordinate eingeben \n");
scanf("%62f", &userPoint.rZ);
return userPoint;
}
int main(void)
{
/**
* Variablendeklaration
*/
char cCmd;
printf("’p’ fuer Punkt eingeben, ’q’ fuer Ausgabe: \n");
while(1)
{
scanf("%c", &cCmd);
if(cCmd == 'p')
{
push(readPoint());
printf("’p’ fuer Punkt eingeben, ’q’ fuer Ausgabe: \n");
}
if(cCmd == 'q')
{
while(!isEmpty())
{
printStackElement(pop());
}
break;
}
}
return 0;
}
Loading…
Cancel
Save