Alright! alright! Frankly,am new in programming.I want to understand what going on in each and every step in this programme and what i have to do to be able to compile and run it.Well,it involves an implementation of a stack using linked lists.Help!
CODE
#include <stdio.h>
#include <stdlib.h> /* for atof() */
#define MAXOP 100 /* max size of operand or operator */
#define NUMBER '0' /* signal that a number was found */
/* useful prototypes. */
int getop(char []);
void push(double);
double pop(void);
/* reverse Polish calculator */
int main(void)
{
int type;
double op2;
char s[MAXOP];
while((type = getop(s)) != EOF)
{
switch(type)
{
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if(op2 != 0.0)
push(pop() / op2);
else
printf("error: zero divisor\n");
break;
case '\n':
printf("\t%.8g\n", pop());
break;
default:
printf("error: unknown command %s\n", s);
break;
}
}
return 0;
}
#include <ctype.h>
int getch(void);
void ungetch(int);
/* getop: get next operator or numeric operand */
int getop(char s[])
{
int i, c;
while((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if(!isdigit© && c != '.')
return c; /* not a number */
i = 0;
if(isdigit©) /* collect integer part */
while(isdigit(s[++i] = c = getch()))
;
if(c == '.')
while(isdigit(s[++i] = c = getch()))
;
s[i] = '\0';
if(c != EOF)
ungetch©;
return NUMBER;
}
#define BUFSIZE 100
char buf[BUFSIZE]; /* buffer for ungetch */
int bufp = 0; /* next free position in buf */
int getch(void) /* get a (possibly pushed back) character */
{
return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c) /* push character back on input */
{
if(bufp >= BUFSIZE)
printf("ungetch: too many characters\n");
else
buf[bufp++] = c;
}
typedef struct list_t {
double item;
struct list_t *next;
} list_t;
list_t *st = NULL; /* To be used as our stack. Starts out as empty (NULL). */
/* push: push f onto value stack */
void push(double f)
{
/* Your code goes here. */
f=(struct node *)malloc(sizeof f);
f->next=list_t->next;
list_t->next=f;
}
/* pop: pop and return top value from stack */
double pop(void)
{
/* Your code goes here. */
void item;
f=list_t;list_t->next=f->next;
item=f->
}
EDIT : born2c0de : Code Tags Added