#define STACK_SIZE 100000 #define Top_i (stack[sp-1].i) #define Top_k (stack[sp-1].k) struct STACK {int i; int k;} stack[STACK_SIZE]; int sp = 0; /* stack pointer */ void push(int i, int k) { if(sp >= STACK_SIZE) { fprintf(stderr, "stack overflow\n"); exit(2);} stack[sp].i = i; stack[sp++].k = k; } void pop() {sp--;} void print_LDIs_stack(int N) { int j; push(0,0); for(j = 0; j < N; j++) { output(j, j, 0); while(lcp[j+1] < lcp[Top_k]) { output(Top_i, j, Top_k); pop(); } /* original code */ push(Top_k, j+1); /* efficient code */ /* if(lcp[Top_k] == lcp[j+1]) Top_k = j+1; else push(Top_k, j+1); */ } }