/** * Access queue last data. */ void* queue_back(const queue_t* cpque_queue) { assert(cpque_queue != NULL); #ifdef CSTL_QUEUE_LIST_SEQUENCE return list_back(&cpque_queue->_t_sequence); #else return deque_back(&cpque_queue->_t_sequence); #endif }
/** * Access stack top data. */ void* stack_top(const cstl_stack_t* cpsk_stack) { assert(cpsk_stack != NULL); #if defined (CSTL_STACK_VECTOR_SEQUENCE) return vector_back(&cpsk_stack->_t_sequence); #elif defined (CSTL_STACK_LIST_SEQUENCE) return list_back(&cpsk_stack->_t_sequence); #else return deque_back(&cpsk_stack->_t_sequence); #endif }
static int deque_fuzz() { Deque d[1]; for (size_t cap = 1; cap <= 10; cap++) { deque_init(d, sizeof(int), cap); for (int i = 0; i < 5; i++) { *(int*)deque_pushback(d) = 4 - i; } for (int i = 0; i < 5; i++) { *(int*)deque_pushfront(d) = 5 + i; } for (int i = 0; i < 10; i++) { int val = *(int*)deque_back(d); deque_popback(d); assertEqual(i, val); } assertEqual(0, 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; }