#include<iostream> using namespace std; /* //Stack.h starts typedef struct Stack{ int* elems; int logical_len; int alloc_len; }stack; void StackNew(stack* s); void StackDepose(stack* s); void StackPush(stack* s,int value); int StackPop(stack* s); //Stack.h ends void StackNew(stack *s){ s->logical_len=0; s->alloc_len=4; s->elems=(int*)malloc(4*sizeof(int)); assert(s->elems!=NULL); } void StackDispose(stack *s){ free(s->elems); } void StackPush(stack *s,int value) { if(s->logical_len==s->alloc_len){ s->alloc_len*=2; s->elems = (int*)realloc(s->elems,s->alloc_len*sizeof(int)); assert(s->elems!=NULL); } s->elems[s->logical_len]=value; s->logical_len++; } int StackPop(stack *s){ assert(s->logical_len>0); s->logical_len--; return s->elems[s->logical_len]; } */ //Stack.h starts typedef struct Stack{ void* elems; int logical_len; int alloc_len; int elem_size; }stack; void StackNew(stack* s,int elem_size); void StackDepose(stack* s); void StackPush(stack* s,void* elem_addr); void* StackPop(stack* s,void* elem_addr); //Stack.h ends void StackNew(stack *s,int elem_size){ s->logical_len=0; s->alloc_len=4; s->elem_size=elem_size; s->elems=malloc(4*s->elem_size); assert(s->elems!=NULL); } void StackDispose(stack *s){ free(s->elems); } void StackPush(stack *s,void* elem_addr) { if(s->logical_len==s->alloc_len){ s->alloc_len*=2; s->elems = (int*)realloc(s->elems,s->alloc_len*s->elem_size); assert(s->elems!=NULL); } void* location = (char*)s->elems + s->logical_len*s->elem_size; memcpy(location,elem_addr,s->elem_size); s->logical_len++; } void* StackPop(stack *s,void* elem_addr){ assert(s->logical_len>0); void* location = (char*)s->elems + (s->logical_len-1)*s->elem_size; memcpy(elem_addr,location,s->elem_size); s->logical_len--; return elem_addr; } void lesson6(){ cout<<"lesson6"<<endl; cout<<"1.data stucture that is simulating c++ class mechanism"<<endl; /* stack s; StackNew(&s); StackPush(&s,1); StackPush(&s,2); cout<<s.elems[0]<<endl; cout<<s.elems[1]<<endl; int top=StackPop(&s); */ stack s; double d1=0.1,d2=0.2,top=0.0; StackNew(&s,sizeof(double)); StackPush(&s,&d1); StackPush(&s,&d2); cout<<((double*)s.elems)[0]<<endl; cout<<((double*)s.elems)[1]<<endl; StackPop(&s,&top); cout<<top<<endl; }