#include #include int *prev,*next; int main() { int n; int i,nextInList,prevInList; scanf("%d",&n); prev=(int*) malloc((n+1)*sizeof(int)); next=(int*) malloc((n+1)*sizeof(int)); if (!prev || !next) { printf("malloc failed %d\n",__LINE__); exit(0); } for (i=0;i=n) { printf("Range error %d\n",__LINE__); exit(0); } if (next[i]==(-1)) { printf("Already allocated\n"); break; } nextInList=next[i]; prevInList=prev[i]; prev[nextInList]=prevInList; next[prevInList]=nextInList; next[i]=prev[i]=(-1); break; case 3: // Change number from allocated to free scanf("%d",&i); if (i<0 || i>=n) { printf("Range error %d\n",__LINE__); exit(0); } if (next[i]!=(-1)) { printf("Already free\n"); break; } prevInList=n; nextInList=next[n]; prev[i]=prevInList; next[i]=nextInList; next[prevInList]=i; prev[nextInList]=i; break; case 4: // List entire free list printf("Free list: "); for (i=next[n];i!=n;i=next[i]) printf("%d ",i); printf("\n"); break; case 5: // List entire free list in reverse printf("Free list: "); for (i=prev[n];i!=n;i=prev[i]) printf("%d ",i); printf("\n"); break; default: printf("No matching case %d\n",__LINE__); exit(0); } } }