Ask Me Help Desk

Ask Me Help Desk (https://www.askmehelpdesk.com/forum.php)
-   C (https://www.askmehelpdesk.com/forumdisplay.php?f=438)
-   -   Stack programming problem when using array in data structure (https://www.askmehelpdesk.com/showthread.php?t=37192)

  • Oct 15, 2006, 02:12 AM
    hulihany2
    stack programming problem
    When I program stack using array in data structure

    This is my data structure
    typedef double stackElementT;
    typedef struct {
    stackElementT elements[STACK_INIT_SIZE];
    int count;
    int size;
    }stackCDT;//data type

    void ExpandStack(stackCDT* stack)
    {
    stackElementT *array;//declare a pointer
    int I,newSize;

    newSize =stack->size*2;


    //allocate space for array

    array=(double*)malloc(STACK_INIT_SIZE *sizeof(double));

    //copy the data in previous array into a new one
    for(I=0;i<stack->size;i++)
    {
    array[i]=stack->elements[i];
    }
    FreeBlock(stack->elements);

    stack->elements=array;//but problem comes??
    //error C2106: '=' : left operand must be l-value

    stack->size=newSize;
    }

    I don't know why?




    This is my code:
    I want to creat a calculator

    #include <stdlib.h> /* For _MAX_PATH definition */
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <simpio.h>
    #include <conio.h>


    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10

    typedef double stackElementT;
    typedef struct {
    stackElementT elements[STACK_INIT_SIZE];
    int count;
    int size;
    }stackCDT;//抽象类型


    void ExpandStack(stackCDT* stack);
    void InitStack(stackCDT* stack);
    void Push(stackCDT* stack,stackElementT element);

    main()
    { stackCDT *OPTR,*OPND;
    char line[19];
    int theta;
    int a,b,c;
    int I;
    InitStack(OPTR);
    InitStack(OPND);

    }
    void InitStack(stackCDT* stack)
    {
    stackElementT *array;
    array=(double*)malloc(STACK_INIT_SIZE *sizeof(double));
    stack->elements=array;//(double*)malloc(STACK_INIT_SIZE *sizeof(double));
    stack->count=0;
    stack->size= STACK_INIT_SIZE;
    }


    void Push(stackCDT* stack,stackElementT element)
    {
    if(stack->count==stack->size)
    ExpandStack(stack);
    stack->elements[stack->count++]=element;
    }


    void ExpandStack(stackCDT* stack)
    {
    stackElementT *array;
    int I,newSize;

    newSize =stack->size*2;
    array=(double*)malloc(STACK_INIT_SIZE *sizeof(double));
    for(I=0;i<stack->size;i++)
    {
    array[i]=stack->elements[i];
    }
    FreeBlock(stack->elements);
    stack->elements=array;
    stack->size=newSize;
    }




    stackElementT Pop(stackCDT* stack)
    {
    if(StackIsEmpty(stack))
    Error("Pop of an empty stack");
    return (stack->elements[--stack->count]);

    }

  • All times are GMT -7. The time now is 01:46 PM.