Sunday, June 6, 2010

Stack Using Dynamic Array in C

1: #include <stdio.h>
2: #include <malloc.h>
3: 
4: #define INCREMENT 30
5: 
6: int capacity = 0;
7: int size = 0;//this will also be used as a index
8: //number of elements popped, 
9: //used in reducing the size of the array
10: int popCount = 0;
11: 

12: int push(int **array,int val)
13: {
14:   (*array)[size++] = val;
15:   if(size == capacity)
16:     capacityChange(array,capacity+INCREMENT);
17:   
18:   return 1;
19: }
20: 
21: int pop(int **array)
22: {
23:   size-=1;//index is one less than the size
24:   if(size < 0)
25:     return 0;
26:   else
27:   {
28:     popCount++;
29:     if(popCount == INCREMENT)
30:       {
31:         capacityChange(array,capacity-popCount);
32:         popCount = 0;
33:       }
34:     return (*array)[size];
35:   }
36: }
37: 
38: int capacityChange(int **array,int ncapacity)
39: {
40:   int i ;
41:   *array = realloc(*array,sizeof(int)*ncapacity);
42:   
43:   if(ncapacity > capacity)
44:     printf("increasing capacity to %d \n",ncapacity);
45:   else if(ncapacity < capacity)
46:     printf("decreasing the capacity to %d \n",ncapacity);
47:       
48:   capacity = ncapacity;
49:   
50:    return 1;
51: }
52: 
53: main()
54: {
55:   int i;
56:   int *array = (int*)malloc(sizeof(int) * INCREMENT);
57:   capacity = INCREMENT;
58:   
59:   for(i = 0 ; i < 31 ; i++)
60:     push(&array,i);
61:   
62:   printf("size is %d \n",size);
63:   do
64:   {
65:     printf("poping the top %d \n", pop(&array));
66:   }while(size);
67:   
68:   printf("size is %d \n",size);
69:   printf("capacity is is %d \n",capacity);
70:   getchar();  
71: }

No comments: