Skip to content

Instantly share code, notes, and snippets.

@Honzaik
Created November 2, 2017 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Honzaik/0f28a630b85d269fcaebd7d4edbfe151 to your computer and use it in GitHub Desktop.
Save Honzaik/0f28a630b85d269fcaebd7d4edbfe151 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h> //atol
typedef struct strom {
char znamenko;
unsigned long cislo;
struct strom *L;
struct strom *P;
int isFull;
} strom;
void initStrom(strom **s) {
*s = malloc(sizeof(strom));
(*s)->znamenko = '#';
(*s)->cislo = -1;
(*s)->L = NULL;
(*s)->P = NULL;
(*s)->isFull = 0;
}
int pridej(strom **s, char znamenko, int cislo) {
if ((*s)->cislo != -1 || (*s)->isFull) return 0; //nesnazim se pridavat syna listu
if ((*s)->L != NULL) {
if (pridej(&(*s)->L, znamenko, cislo)) {
return 1;
}
if ((*s)->P != NULL) {
if (pridej(&(*s)->P, znamenko, cislo)) {
return 1;
}
else {
(*s)->isFull = 1;
return 0;
}
}
else {
initStrom(&(*s)->P);
if (znamenko != '#') {
(*s)->P->znamenko = znamenko;
}
else {
(*s)->P->cislo = cislo;
}
return 1;
}
}
else {
initStrom(&(*s)->L);
if (znamenko != '#') {
(*s)->L->znamenko = znamenko;
}
else {
(*s)->L->cislo = cislo;
}
return 1;
}
}
void vypisInfix(strom **s) {
if (*s != NULL) {
if ((*s)->L != NULL) printf("(");
vypisInfix(&(*s)->L);
if ((*s)->znamenko != '#') printf(" %c ", (*s)->znamenko);
else printf("%d", (*s)->cislo);
vypisInfix(&(*s)->P);
if ((*s)->L != NULL) printf(")");
}
}
int jePrvni = 1;
void vypisPostfix(strom **s) {
if (*s != NULL) {
vypisPostfix(&(*s)->L);
vypisPostfix(&(*s)->P);
if (jePrvni) {
if ((*s)->znamenko != '#') printf("%c", (*s)->znamenko);
else printf("%d", (*s)->cislo);
jePrvni = 0;
}
else {
if ((*s)->znamenko != '#') printf(" %c", (*s)->znamenko);
else printf(" %d", (*s)->cislo);
}
}
}
int main() {
strom *s = NULL;
unsigned long i = 0;
char buffer[11];
char c;
while ((c = getchar()) != ' ' && c != EOF) {
buffer[i] = c;
i++;
}
buffer[i] = 0;
if (i > 0) { // neco se nacetlo, nebyl prazdny vstup
initStrom(&s);
if (buffer[0] >= '0' && buffer[0] <= '9') { //v bufferu je string cisla
i = atol(buffer);
s->cislo = i;
}
else {
s->znamenko = buffer[0];
}
}
i = 0;
while ((c = getchar()) != EOF) {
if (c == ' ') {
buffer[i] = 0;
if (buffer[0] >= '0' && buffer[0] <= '9') { //v bufferu je string cisla
i = atol(buffer);
pridej(&s, '#', i);
}
else pridej(&s, buffer[0], -1); //je to jen jeden char
i = 0;
}
else {
buffer[i] = c;
i++;
}
}
//zbytek v bufferu
buffer[i] = 0;
if (buffer[0] >= '0' && buffer[0] <= '9') { //v bufferu je string cisla
i = atol(buffer);
pridej(&s, '#', i);
}
else pridej(&s, buffer[0], -1); //je to jen jeden char
vypisPostfix(&s);
printf("\n");
vypisInfix(&s);
printf("\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment