/** * Access queue front data. */ void* queue_front(const queue_t* cpque_queue) { assert(cpque_queue != NULL); #ifdef CSTL_QUEUE_LIST_SEQUENCE return list_front(&cpque_queue->_t_sequence); #else return deque_front(&cpque_queue->_t_sequence); #endif }
static int deque_basic() { Deque d[1]; deque_init(d, sizeof(int), 10); *(int*)deque_pushback(d) = 2; *(int*)deque_pushback(d) = 3; *(int*)deque_pushfront(d) = 1; *(int*)deque_pushback(d) = 4; *(int*)deque_pushfront(d) = 0; for (int i = 0; i <= 4; i++) { int val = *(int*)deque_front(d); deque_popfront(d); assertEqual(i, val); assertEqual(4-i, deque_size(d)); } deque_close(d); return 0; }
int main() { const char *output[] = {"EsaY", "YasE", "aYsE", "asYE"}; const char *input = "EasY"; const char *pinput; /* point to input */ const char *poutput; /* point to output */ size_t i; for (i = 0; i < SIZE(output); i++) { pinput = input; poutput = output[i]; printf("for pattern %s:\n", poutput); for (; *poutput != '\0';) { if (!deque_empty() && deque_front() == *poutput) { printf("+\t%c\n", deque_pop_front()); poutput++; } else if (!deque_empty() && deque_back() == *poutput) { printf("*\t%c\n", deque_pop_back()); poutput++; } else { /* the deque is empty or not the first or last */ if (islower(*pinput)) { deque_push_back(*pinput++); } else if (isupper(*pinput)) { deque_push_front(*pinput++); } else if (*pinput == '\0') { printf("unable to generate such pattern\n"); break; } } } putchar('\n'); } return 0; }