//////////////////////////////////////// // ZASOBNIK.C // // // // implementace dynamickeho zasobniku // // // // Tomas Pop 27.2.1999 // ///////////////////////////////////////////////////////////////////////////// #include ///////////////////////////////////////////////////////////////////////////// #define KPRESS {printf("\nPress any key ...\n"); getchar();} ///////////////////////////////////////////////////////////////////////////// typedef struct mStack { char value; struct mStack *prev; } MSTACK; ///////////////////////////////////////////////////////////////////////////// void init(MSTACK *item) { item=NULL; } ///////////////////////////////////////////////////////////////////////////// char mPop(MSTACK **pStack) { char data; MSTACK *item; data=(*pStack)->value; item=*pStack; *pStack=(*pStack)->prev; item=NULL; free(item); return(data); } ///////////////////////////////////////////////////////////////////////////// void mPush(MSTACK **pStack,char data) { MSTACK *new; if((new=(MSTACK *)malloc(sizeof(MSTACK)))==NULL) { printf("\nMalo pameti\n"); return; } new->value=data; new->prev=*pStack; *pStack=new; } ///////////////////////////////////////////////////////////////////////////// int isEmpty(MSTACK *pStack) { return( (pStack==NULL) ? 1 : 0 ); } ///////////////////////////////////////////////////////////////////////////// void main(int argc,char *argv[]) { MSTACK *actual; FILE *fr,*fw; char pom; if(argc<3) { printf("\nUsage : filename inputFile outputFile\n"); KPRESS exit(0); } if((fr=fopen(argv[1],"r"))==NULL) { printf("\nOpening \"%s\" failed\n",argv[1]); KPRESS exit(0); } if((fw=fopen(argv[2],"w"))==NULL) { printf("\nOpening \"%s\" failed\n",argv[2]); KPRESS exit(0); } init(actual); // nacteni hodnot ze souboru while((pom=getc(fr))!=EOF) mPush(&actual,pom); // ulozeni hodnot do souboru while(!isEmpty(actual)){ pom=mPop(&actual); putc(pom,fw); } fclose(fr); fclose(fw); }