/* * modified from textbook example * HBF */ #include #define MAX 10 void enqueue_left(int [], int *, int *, int); void enqueue_right(int [], int *, int *, int); void pop_left(int [], int *, int *); void pop_right(int [], int *, int *); int peek_left(int [], int); int peek_right(int [], int); void display(int [], int, int); int main() { int deque[MAX]; int left = -1, right = -1; int i; for (i=0; i<5; i++) { enqueue_left(deque, &left, &right, i); enqueue_right(deque, &left, &right,i+5); } printf("\nDisplay all: "); display(deque, left, right); printf("\nPeek left: %d\n", peek_left(deque, left)); printf("\nPeek right: %d\n", peek_right(deque, right)); printf("\nDelete left and then right: "); pop_left(deque, &left, &right); pop_right(deque, &left, &right); printf("\nDisplay all: "); display(deque, left, right); return 0; } void enqueue_right(int deque[], int *left, int *right, int val) { if ((*left == 0 && *right == MAX - 1) || (*left == *right + 1)) { printf("\n OVERFLOW"); return; } if (*left == -1) /* if queue is initially empty */ { *left = 0; *right = 0; } else { if (*right == MAX - 1) /*right is at last position of queue */ *right = 0; else *right = *right + 1; } deque[*right] = val; } void enqueue_left(int deque[], int *left, int *right, int val) { if ((*left == 0 && *right == MAX - 1) || (*left == *right + 1)) { printf("\n Overflow"); return; } if (*left == -1)/*If queue is initially empty*/ { *left = 0; *right = 0; } else { if (*left == 0) *left = MAX - 1; else *left = *left - 1; } deque[*left] = val; } void pop_left(int deque[], int *left, int *right) { if (*left == -1) { printf("\n UNDERFLOW"); return; } if (*left == *right) /*Queue has only one element */ { *left = -1; *right = -1; } else { if (*left == MAX - 1) *left = 0; else *left = *left + 1; } } void pop_right(int deque[], int *left, int *right) { if (*left == -1) { printf("\n UNDERFLOW"); return; } if (*left == *right) /*queue has only one element*/ { *left = -1; *right = -1; } else { if (*right == 0) *right = MAX - 1; else *right = *right - 1; } } int peek_left(int deque[], int left) { if (left == -1) { printf("\n UNDERFLOW"); return -1; } return deque[left]; } int peek_right(int deque[], int right) { if (right == -1) { printf("\n UNDERFLOW"); return -1; } return deque[right]; } void display(int deque[], int left, int right) { int front = left, rear = right; if (front == -1) { printf("\nQUEUE IS EMPTY"); return; } if (front <= rear) { while (front <= rear) { printf("%d ", deque[front]); front++; } } else { while (front <= MAX - 1) { printf("%d ", deque[front]); front++; } front = 0; while (front <= rear) { printf("%d ", deque[front]); front++; } } } /* Display all: 4 3 2 1 0 5 6 7 8 9 Peek left: 4 Peek right: 9 Delete left and then right: Display all: 3 2 1 0 5 6 7 8 */