Browse Source

Added files

master
Rainer Hihn 3 years ago
parent
commit
9891b2a946
3 changed files with 200 additions and 0 deletions
  1. +102
    -0
      pointStack.c
  2. +40
    -0
      pointStack.h
  3. +58
    -0
      stackmain.c

+ 102
- 0
pointStack.c View File

@@ -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
- 0
pointStack.h View File

@@ -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
- 0
stackmain.c View File

@@ -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