#include <stdio.h> #include <malloc.h> struct mystack { int* data; int top; int size; }; struct mystack* createStack (void ) { struct mystack *temp = (struct mystack *)
malloc(sizeof(struct mystack)); if (temp == NULL) return NULL ; temp->top =-1; temp->size = 1; temp->data = (int *) malloc (sizeof(int) * temp->size); return temp; } int isEmpty(struct mystack *stk) { return(stk->top == -1); } int isFull(struct mystack *stk) { return(stk->top == (stk->size)-1); } void expand (struct mystack *temp) { printf("expanding ..curent size %d\n",temp->size); temp->size*=2; temp->data = (int *) realloc(temp->data,temp->size
* sizeof(int)); } void disp(struct mystack* stk) { int i =0; printf("\n***Total elements*** are %d \n"
,stk->top+1); for(i=0;i<=stk->top;i++) printf("%d ",stk->data[i]); printf("\n************ \n"); } void push (struct mystack *stk, int data) { if (isFull(stk)) { printf("Stack full\n"); expand(stk); } stk->top++; printf("pushing %d in position %d\n",data,(stk)->top); (stk)->data[(stk)->top]=data; } int pop (struct mystack *stk) { if (isEmpty(stk)) { printf("empty stack\n"); return -1; } int temp; temp = (stk)->data[(stk)->top]; printf("popping %d from position %d\n",
temp,(stk)->top); (stk)->top--; return temp; } void deleteStack (struct mystack *stk) { if (stk) { if (stk->data) free(stk->data); free(stk); } } int main (void ) { //create a stack struct mystack *stk = NULL; stk = createStack(); if (stk == NULL) return -1; push(stk,10); push(stk,3); push(stk,7); disp(stk); pop(stk); push(stk,8); push(stk,4); pop(stk); push(stk,9); push(stk,89); push(stk,11111111); push(stk,49); pop(stk); disp(stk); deleteStack(stk); return 0; }
No comments:
Post a Comment