PDA

View Full Version : Stack programming problem when using array in data structure


hulihany2
Oct 15, 2006, 02:12 AM
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]);

}