dll.c
00088: void dll_push_tail (dll_t *_p_dll, dll_node_t *_p_node)
00089: {
00090: if (0 ==_p_dll->tail_) {
00091: _p_dll->head_ = _p_dll->tail_ = _p_node;
00092: _p_node->next_ = _p_node->prev_ = 0;
00093: }
00094: else {
00095: dll_node_t *p_tail = _p_dll->tail_;
00096:
00097: p_tail->next_ = _p_node;
00098: _p_node->prev_ = p_tail;
00099: _p_node->next_ = 0;
00100: _p_dll->tail_ = _p_node;
00101: }
00102:
00103: _p_dll->count_ ++;
00104: }
00105:
00106: dll_node_t *dll_pop_head (dll_t *_p_dll)
00107: {
00108: dll_node_t *p_node = _p_dll->head_;
00109:
00110: if (p_node != 0) {
00111: _p_dll->count_--;
00112: _p_dll->head_ = p_node->next_;
00113: if (0 ==_p_dll->head_) {
00114: _p_dll->tail_ = 0;
00115: }
00116: else {
00117: p_node->next_->prev_ = 0;
00118: }
00119: }
00120:
00121: return p_node;
00122: }
00088: void dll_push_tail (dll_t *_p_dll, dll_node_t *_p_node)
00089: {
00090: if (0 ==_p_dll->tail_) {
00091: _p_dll->head_ = _p_dll->tail_ = _p_node;
00092: _p_node->next_ = _p_node->prev_ = 0;
00093: }
00094: else {
00095: dll_node_t *p_tail = _p_dll->tail_;
00096:
00097: p_tail->next_ = _p_node;
00098: _p_node->prev_ = p_tail;
00099: _p_node->next_ = 0;
00100: _p_dll->tail_ = _p_node;
00101: }
00102:
00103: _p_dll->count_ ++;
00104: }
00105:
00106: dll_node_t *dll_pop_head (dll_t *_p_dll)
00107: {
00108: dll_node_t *p_node = _p_dll->head_;
00109:
00110: if (p_node != 0) {
00111: _p_dll->count_--;
00112: _p_dll->head_ = p_node->next_;
00113: if (0 ==_p_dll->head_) {
00114: _p_dll->tail_ = 0;
00115: }
00116: else {
00117: p_node->next_->prev_ = 0;
00118: }
00119: }
00120:
00121: return p_node;
00122: }
图1
dll.c
00165: void dll_merge (dll_t *_p_dest, dll_t *_p_src)
00166: {
00167: dll_node_t *p_node = _p_src->head_;
00168:
00169: while (0 != p_node) {
00170: if (0 ==_p_dest->tail_) {
00171: _p_dest->head_ = _p_dest->tail_ = p_node;
00172: _p_dest->next_ = _p_dest->prev_ = 0;
00173: }
00174: else {
00175: dll_node_t *p_tail = _p_dest->tail_;
00176:
00177: p_tail->next_ = _p_dest;
00178: _p_dest->prev_ = p_tail;
00179: _p_dest->next_ = 0;
00180: _p_dest->tail_ = _p_dest;
00181: }
00182:
00183: _p_dest->count_ ++;
00184: p_node = p_node->next_;
00185: }
00186:
00187: _p_src->count_ = 0;
00188: _p_src->head_ = 0;
00189: _p_src->tail_ = 0;
00190: }
00165: void dll_merge (dll_t *_p_dest, dll_t *_p_src)
00166: {
00167: dll_node_t *p_node = _p_src->head_;
00168:
00169: while (0 != p_node) {
00170: if (0 ==_p_dest->tail_) {
00171: _p_dest->head_ = _p_dest->tail_ = p_node;
00172: _p_dest->next_ = _p_dest->prev_ = 0;
00173: }
00174: else {
00175: dll_node_t *p_tail = _p_dest->tail_;
00176:
00177: p_tail->next_ = _p_dest;
00178: _p_dest->prev_ = p_tail;
00179: _p_dest->next_ = 0;
00180: _p_dest->tail_ = _p_dest;
00181: }
00182:
00183: _p_dest->count_ ++;
00184: p_node = p_node->next_;
00185: }
00186:
00187: _p_src->count_ = 0;
00188: _p_src->head_ = 0;
00189: _p_src->tail_ = 0;
00190: }
图2
dll.c
00175: void dll_merge (dll_t *_p_dest, dll_t *_p_src)
00176: {
00177: dll_node_t *p_node = dll_pop_head (_p_src);
00178:
00179: while (0 != p_node) {
00180: dll_push_tail (_p_dest, p_node);
00181: p_node = dll_pop_head (_p_src);
00182: }
00183: }
00175: void dll_merge (dll_t *_p_dest, dll_t *_p_src)
00176: {
00177: dll_node_t *p_node = dll_pop_head (_p_src);
00178:
00179: while (0 != p_node) {
00180: dll_push_tail (_p_dest, p_node);
00181: p_node = dll_pop_head (_p_src);
00182: }
00183: }
图3