예제 #1
0
void * owner(void * arg)
{
  int i;
  for(i=0; i<ROUNDS; ++i)
  {
    if(nondet())
    {
      popBottom();
    }
    else
    {
      pushBottom();
    }
  }
}
예제 #2
0
파일: Deque.c 프로젝트: Inventor22/Projects
/*
Remove an item from the Deque
*/
bool removeItem(Deque* d, int item)
{
    Node* h = d->head; // get pointer to head and tail of Deque
    Node* t = d->tail; // iterate front to back and back to front simultaneously
    while (true) {
        if (h->data == item) { // iterate forwards
            if (h->prev == NULL) {
                popTop(d);
            } else {
                Node* n = h;
                n->prev->next = h->next;
                n->next->prev = h->prev;
            }
            return true;
        } else if (t->data == item) { // iterate backwards
            if (t->next == NULL) {
                popBottom(d);
            } else {
                Node* n = t;
                n->prev->next = t->next;
                n->next->prev = t->prev;
            }
            return true;
        }

        h = h->next;

        // if pointing to same value, i.e. meet in the middle of the Deque, return
        if (h == t) return false;

        t = t->prev;

        // if end of deque has been reached (shouldn't occur because of if(h == t)
        if (h == NULL || t == NULL) return false;
    }

    return false;
}