Welcome to Dream.In.Code
Become a C++ Expert!

Join 137,382 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 2,047 people online right now. Registration is fast and FREE... Join Now!




postfix calculator function for linked lists

 
Reply to this topicStart new topic

postfix calculator function for linked lists, i am supposed to write a function for a stack using a linked list so

yak_nor
19 Sep, 2006 - 05:02 PM
Post #1

New D.I.C Head
*

Joined: 19 Sep, 2006
Posts: 4


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

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

rolleyes.gif
User is offlineProfile CardPM
+Quote Post

Amadeus
RE: Postfix Calculator Function For Linked Lists
19 Sep, 2006 - 05:31 PM
Post #2

g++ -o drink whiskey.cpp
Group Icon

Joined: 12 Jul, 2002
Posts: 12,230



Thanked: 40 times
Dream Kudos: 25
My Contributions
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?
User is offlineProfile CardPM
+Quote Post

yak_nor
RE: Postfix Calculator Function For Linked Lists
19 Sep, 2006 - 05:37 PM
Post #3

New D.I.C Head
*

Joined: 19 Sep, 2006
Posts: 4


My Contributions
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.
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) && 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. */
}

User is offlineProfile CardPM
+Quote Post

Xing
RE: Postfix Calculator Function For Linked Lists
19 Sep, 2006 - 05:38 PM
Post #4

D.I.C Addict
Group Icon

Joined: 22 Jul, 2006
Posts: 723



Thanked: 2 times
Dream Kudos: 1575
My Contributions
@yak_nor
Forum Rules
User is offlineProfile CardPM
+Quote Post

Reply to this topicStart new topic
Time is now: 12/5/08 01:46AM

Live C++ Help!

C++ Tutorials

Reference Sheets

C++ Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month