postfix calculator function for linked lists

i am supposed to write a function for a stack using a linked list so

Page 1 of 1

3 Replies - 12135 Views - Last Post: 19 September 2006 - 06:38 PM Rate Topic: ***** 1 Votes

#1 yak_nor   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 6
  • Joined: 19-September 06

postfix calculator function for linked lists

Posted 19 September 2006 - 06:02 PM

#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. */
}

/* pop: pop and return top value from stack */
double pop(void)
{
	/* Your code goes here. */
}

:rolleyes:

Is This A Good Question/Topic? 0
  • +

Replies To: postfix calculator function for linked lists

#2 Amadeus   User is offline

  • g+ + -o drink whiskey.cpp
  • member icon

Reputation: 253
  • View blog
  • Posts: 13,507
  • Joined: 12-July 02

Re: postfix calculator function for linked lists

Posted 19 September 2006 - 06:31 PM

Hmm...again, this appears to be a template. Can you post the code you have written in an attempt to complete the assignment? And specify the difficulties you are encountering?
Was This Post Helpful? 0
  • +
  • -

#3 yak_nor   User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 6
  • Joined: 19-September 06

Re: postfix calculator function for linked lists

Posted 19 September 2006 - 06:37 PM

i am trying to write a program which implements a post fix calculator. i managed to get most of the functions done but what am still confused about is writing a stack using linked lists so that i use the pop function to remove the first element from the stack. The push function to add an the element on top of the stack. With arrays it is easy but wit a stack it is givin me a headache.
#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) && c != '.')
		return c; /* not a number */
	i = 0;
	if(isdigit(c)) /* collect integer part */
		while(isdigit(s[++i] = c = getch()))
		;
		if(c == '.')
			while(isdigit(s[++i] = c = getch()))
			;
			s[i] = '\0';
			if(c != EOF)
				ungetch(c);
			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. */
}

/* pop: pop and return top value from stack */
double pop(void)
{
	/* Your code goes here. */
}


Was This Post Helpful? 0
  • +
  • -

#4 Xing   User is offline

  • D.I.C Addict
  • member icon

Reputation: 19
  • View blog
  • Posts: 725
  • Joined: 22-July 06

Re: postfix calculator function for linked lists

Posted 19 September 2006 - 06:38 PM

@yak_nor
Forum Rules
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1