资源简介
系统程序员成长计划-源码
代码片段和文件信息
/*
* File: dlist.c
* Author: Li XianJing
* Brief: double list implementation.
*
* Copyright (c) Li XianJing
*
* Licensed under the Academic Free License version 2.1
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not write to the Free Software
* Foundation Inc. 59 Temple Place Suite 330 Boston MA 02111-1307 USA
*/
/*
* History:
* ================================================================
* 2008-11-09 Li XianJing created
*
*/
#include
#include “dlist.h“
typedef struct _DListNode
{
struct _DListNode* prev;
struct _DListNode* next;
void* data;
}DListNode;
struct _DList
{
DListNode* first;
};
static DListNode* dlist_node_create(void* data)
{
DListNode* node = malloc(sizeof(DListNode));
if(node != NULL)
{
node->prev = NULL;
node->next = NULL;
node->data = data;
}
return node;
}
static void dlist_node_destroy(DListNode* node)
{
if(node != NULL)
{
node->next = NULL;
node->prev = NULL;
free(node);
}
return;
}
DList* dlist_create(void)
{
DList* thiz = malloc(sizeof(DList));
if(thiz != NULL)
{
thiz->first = NULL;
}
return thiz;
}
static DListNode* dlist_get_node(DList* thiz size_t index int fail_return_last)
{
DListNode* iter = thiz->first;
while(iter != NULL && iter->next != NULL && index > 0)
{
iter = iter->next;
index--;
}
if(!fail_return_last)
{
iter = index > 0 ? NULL : iter;
}
return iter;
}
DListRet dlist_insert(DList* thiz size_t index void* data)
{
DListNode* node = NULL;
DListNode* cursor = NULL;
if((node = dlist_node_create(data)) == NULL)
{
return DLIST_RET_OOM;
}
if(thiz->first == NULL)
{
thiz->first = node;
return DLIST_RET_OK;
}
cursor = dlist_get_node(thiz index 1);
if(index < dlist_length(thiz))
{
if(thiz->first == cursor)
{
thiz->first = node;
}
else
{
cursor->prev->next = node;
node->prev = cursor->prev;
}
node->next = cursor;
cursor->prev = node;
}
else
{
cursor->next = node;
node->prev = cursor;
}
return DLIST_RET_OK;
}
DListRet dlist_prepend(DList* thiz void* data)
{
return dlist_insert(thiz 0 data);
}
DListRet dlist_append(DList* thiz void* data)
{
return dlist_insert(thiz -1 data);
}
DListRet dlist_delete(DList* thiz size_t index)
{
DListNode* cursor = dlist_get_node(thiz index 0);
if(cursor != NULL)
{
if(cursor == thiz->first)
{
thiz->first =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 62 2010-05-05 11:27 系统程序员成长计划-源码\spexamples\.svn\all-wcprops
文件 278 2010-05-05 11:27 系统程序员成长计划-源码\spexamples\.svn\entries
文件 64 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\.svn\all-wcprops
文件 214 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\.svn\entries
文件 66 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\4\.svn\all-wcprops
文件 213 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\4\.svn\entries
文件 469 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\all-wcprops
文件 789 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\entries
文件 4307 2010-04-21 21:39 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\text-ba
文件 1942 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\text-ba
文件 1561 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\text-ba
文件 55 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\.svn\text-ba
文件 4307 2010-04-21 21:38 系统程序员成长计划-源码\spexamples\1\4\embrace_change\dlist.c
文件 1942 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\dlist.h
文件 1561 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\main.c
文件 55 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\4\embrace_change\Makefile
文件 66 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\5\.svn\all-wcprops
文件 202 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\5\.svn\entries
文件 414 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\all-wcprops
文件 778 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\entries
文件 4593 2010-04-21 21:39 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\text-ba
文件 2097 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\text-ba
文件 1042 2010-04-18 17:32 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\text-ba
文件 56 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\5\dry\.svn\text-ba
文件 4593 2010-04-21 21:39 系统程序员成长计划-源码\spexamples\1\5\dry\dlist.c
文件 2097 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\5\dry\dlist.h
文件 1042 2010-04-18 17:31 系统程序员成长计划-源码\spexamples\1\5\dry\main.c
文件 56 2010-04-18 17:30 系统程序员成长计划-源码\spexamples\1\5\dry\Makefile
文件 66 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\6\.svn\all-wcprops
文件 209 2010-04-29 15:33 系统程序员成长计划-源码\spexamples\1\6\.svn\entries
............此处省略1392个文件信息
评论
共有 条评论