ADT双端队列的实现

来源:互联网 发布:centos关闭防火墙端口 编辑:程序博客网 时间:2024/05/16 06:56

双端队列,概念上抽象为在队尾和队头都可以进行出队和入队操作的队列。

实现中主要用到了双向链表。

typede struct dequeue_node_tag{struct dequeue_node_tag *next;struct dequeue_node_tag *prev;int data;}dequeue_node_t;typedef struct dequeue_tag{dequeue_node_t *head;dequeue_node_t *tail;int coutn;}dequeue_t;dequeue_node_t *dequeue_node_alloc(int data){dequeue_node_t *t = (dequeue_node_t *)malloc( sizeof(dequeue_node_t) );t->prev = t->next = NULL;t->data = data;return t;}dequeue_t *dequeue_init(dequeue_t *q){if( q == NULL){q = (dequeue_t *)malloc( sizeof(dequeue_t) );q->head = q->prev = NULL;q->count = 0;return q;}}int dequeue_put_tail(dequeue_t *q, dequeue_node_t *node){if( p->count == 0 ){q->head = q->tail = node;q->count++;}else{node->prev = q->tail;q->tail->next = node;q->tail = node;}}int dequeue_put_head(dequeue_t *q, dequeue_node_t *node){if( p->count == 0 ){q->head = q->tail = node;q->count++;}else{node->next = q->head;q->head->prev = node;q->head = node;}}int dequeue_get_head(dequeue_t *q){if( q->count == 0 ){return -1;}dequeue_node_t *t = q->head;int data = t->data;q->head = q->head->next;q->head->prev = NULL;free(t);return data;}int dequeue_get_tail(dequeue_t *q){if( q->count == 0 ){return -1;}dequeue_node_t *t = q->tail;int data = t->data;q->tail = q->tail->prev;q->tail->next = NULL;free(t);return data;}


0 0