Closed Thread
Results 1 to 4 of 4

Thread: tree for infix expression

  1. #1
    MrCode's Avatar
    MrCode is offline Newbie
    Join Date
    Oct 2009
    Posts
    2
    Rep Power
    0

    tree for infix expression

    Hi,

    Suggest me on how to avoid the problem.
    i want my program to work for any expression

    but here program is not working for second input.

    just let me know the procedure how does the compiler is able to parse the complex expressions.





    Code:
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #include "BST.h"
    
    #define EMPTY 0
    
    void push_exp(int item);
    int pop_exp();
    int is_stk_exp_empty();
    void push_tree();
    BST_t *pop_tree();
    int is_stk_tree_empty();
    
    BST_t * infixtree(char* infix);
    
    struct stack_exp
    {
            int data[MAX];
            int top;
    };
    
    struct stack_exp ex;
    
    struct stack_tree
    {
            BST_t *nodes[100];
    	 int top;
    };
    
    struct stack_tree tree;
    
    int emptystacks()
    {
            ex.top =-1;
            tree.top =-1;
    }
    
    void push_exp(int item)
    {
                    ++ex.top;
                    ex.data[ex.top]=item;
    }
    
    int pop_exp()
    {
            int ret =0;
            if(ex.top != -1)
            {
                    ret= ex.data[ex.top];
                    --ex.top;
            }
            return ret;
    }
    
    int is_stk_exp_empty()
    {
    	if(ex.top == -1)
    
                    return 1;
            else
                    return 0;
    }
    
    int isoperator(char e)
    {
            if(e == '+' || e == '-' || e == '*' || e == '/' || e == '%'|| e == '^')
    
                    return 1;
            else
                    return 0;
    }
    
    BST_t *create_node(int n1)
    {
            BST_t *newnode;
            newnode = (BST_t *)malloc(sizeof(newnode));
    
            newnode->data=n1;
            newnode->left=NULL;
            newnode->right=NULL;
    
            return newnode;
    }
    
    int isoper(char ch)
    {
    	 char op;
            switch(ch)
            {
            case '+':
            case '-':
            case '/':
            case '*':
            case '^':
                    op =1;
                    break;
            default:
                    op=0;
                    break;
            }
    return op;
    }
    
    
    BST_t * infixtree(char* infix)
    {
            char *i,*p;
            char n1;
            BST_t *temp,*r,*l,*root,*t;
            i = &infix[0];
    
            while(*i)
            {
    
                    
                    while(isblank(*i) && *i != '\0')
    		 {
                            i++;
                    }
    			
                    if( isdigit(*i) || isalpha(*i))
                    {
                            while( isdigit(*i) || isalpha(*i))
                            {
                                    push_exp(*i);
                                    i++;
                            }
                    }
                    if(isoper(*i))
                    {
                            push_exp(*i);
                    }
                    if( *i == '(' )
                    {
                            push_exp(*i);
                    }
    
                    if( *i == ')')
                    {
                    while( (n1 = pop_exp()) != '(')
                    {
    
                      if(isoperator(n1))
                       {
                         temp = create_node(n1);
    			   t = pop_tree();
                         if(t)
                           temp->right = t;
                       }
                      else
                      {
                        r=create_node(n1);
                        push_tree(r);
                      }
    
                    }
                    l=pop_tree();
                    if(l){
                            temp->left=l;
                            root=temp;
                            push_tree(root);
                    }
    }
    i++;
    }
    return root;
    }
    
    void push_tree(BST_t *t)
    {
            tree.top++;
            tree.nodes[tree.top]=(BST_t *)malloc(sizeof(BST_t));
            tree.nodes[tree.top]=t;
    }
                
    
    BST_t *pop_tree()
    {
            if(tree.top > -1 )
            	return tree.nodes[tree.top--];
            else
           	 return NULL;
    }
    
    int is_stk_tree_empty()
    {
            if(tree.top == -1)
                    return 1;
            else
                    return 0;
    }
    
    void inorder(BST_t * root)
    {
            if(root != NULL )
            {
                inorder(root->left);
                printf("%c", root->data);
    	    inorder(root->right);
            }
    }
    
    
    int main()
    {
          char in1[70],in2[70],post[50],ch;
          BST_t * root1, *root2;root1=root2=NULL;
          int i=0;
          printf(" Exp: \"( a + ( ( ( ( b * c ) ^ d ) / ( e + f ) ) * g) )\"\n");
          strcpy(in1," ( a + ( ( ( ( b * c ) ^ d ) / ( e + f ) ) * g))"); '
          emptystacks();
          root1 = infixtree(in1);
          inorder(root1);
          printf("\n");
          printf("Exp : \"a + b * c ^ d / ( e + f ) * g\" \n");
          strcpy(in2,"a + b * c ^ d / ( e + f ) * g"); 
          emptystacks();
          root2 = infixtree(in2);
          inorder(root2);
    return 0;
    }

  2. CODECALL Circuit advertisement
    Join Date
    Always
    Posts
    Many

     
  3. #2
    Join Date
    Jul 2006
    Posts
    16,475
    Blog Entries
    75
    Rep Power
    143

    Re: tree for infix expression

    Moved to correct forum.

    Without having BST.h, it's a little hard to see what all might be happening. What input/output are you getting?
    Programming is a branch of mathematics.
    My CodeCall Blog | My Personal Blog

  4. #3
    MrCode's Avatar
    MrCode is offline Newbie
    Join Date
    Oct 2009
    Posts
    2
    Rep Power
    0

    Re: tree for infix expression

    i am actually using some other macors and all here please consider which are required for the above program only.


    Code:
    #ifndef __BSTREE__
    #define __BSTREE__
            typedef struct Bin_Srch_Tree BST_t;
            struct Bin_Srch_Tree
            {
                    BST_t *left;
                    int data;
                    BST_t *right;
            };
    
    extern  BST_t *nodes[20];
    
    #define Node_Inserted_Successfully  1
    
    #define Node_Creation_Failed     2
    
    #define Duplication_Not_Allowed  3
    #define MAX 20
    
    BST_t *create_node(int );
    int insert(BST_t **, int );
    
    void inorder(BST_t *);
    void preorder(BST_t *);
    void postorder(BST_t *);
    
    extern int top, b;
    int empty();
    void push(BST_t **, BST_t *);
    BST_t*  pop(BST_t **);
    #endif

  5. #4
    Join Date
    Jul 2006
    Posts
    16,475
    Blog Entries
    75
    Rep Power
    143

    Re: tree for infix expression

    My guess is there may be an error with push or pop.
    Programming is a branch of mathematics.
    My CodeCall Blog | My Personal Blog

Closed Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Infix/Postfix & bc dc conversion
    By sheepdogg09 in forum C and C++
    Replies: 1
    Last Post: 09-18-2011, 03:45 PM
  2. postfix to infix
    By speachy_15 in forum Java Help
    Replies: 4
    Last Post: 02-05-2011, 01:41 AM
  3. Infix
    By Apprentice123 in forum General Programming
    Replies: 26
    Last Post: 05-07-2009, 02:10 PM
  4. Real Tree v1.0 - 3D tree rendering in Visual Basic
    By Kernel in forum Software Development Tools
    Replies: 0
    Last Post: 09-25-2006, 03:41 PM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts