设为首页 加入收藏

TOP

c语言实现双链表 (二)
2014-11-23 22:53:45 来源: 作者: 【 】 浏览:5
Tags:语言 实现 双链表
*****************/
DNode* init(int data)
{
DNode* headNode=(DNode*)malloc(sizeof(DNode));
assert(headNode);
headNode->next = NULL;
headNode->prev = NULL;
headNode->data = data;
return headNode;
}

int isEmpty(DNode* L)
{
return L->next ==NULL;
}

int isLast(DNode* L,DNode* p)
{
return p->next==NULL;
}

DNode* findCur(DNode* L,int data)
{
DNode* curNode;

curNode = L->next;

while(curNode !=NULL&& curNode->data!=data)
curNode = curNode->next;

return curNode;
}
/************************************************************************/
/* 将节点插入到队列后端 */
/************************************************************************/
void insertLastNode(DNode* L,int data)
{
assert(L);
DNode* oNode=(DNode*)malloc(sizeof(DNode));
oNode->data = data;
L->next = oNode;
oNode->prev = L;
}
/**
插入到链表指定位置
**/
void insertNode(DNode* L,int data)
{
assert(L);
DNode* qNode=(DNode*)malloc(sizeof(DNode));
DNode* prevNode= findPrev(L,data);



qNode->next = prevNode->next;
prevNode->next->prev = qNode;

prevNode->next = qNode;
qNode->prev = prevNode;
return;
}

DNode* findPrev(DNode* L,int data)
{
assert(L);
DNode* tmpNode;
tmpNode = L;

while (tmpNode->next!=NULL&&tmpNode->next->data!=data)
{
tmpNode = tmpNode->next;
}
return tmpNode;
}

void deleNode(DNode* L,int data)
{
DNode* tmpNode = findCur(L,data);
if (tmpNode==NULL)
{
return ;
}
if (isLast(L,tmpNode))
{
tmpNode->prev =NULL;
tmpNode->prev->next =NULL;
free(tmpNode);
}

tmpNode ->prev->next = tmpNode->next;
tmpNode->next->prev = tmpNode->prev;
free(tmpNode);
return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
DNode* myDNode;
myDNode = init(1);
return 0;
}


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言中字符串常量到底存在哪了? 下一篇C语言指针声明探秘

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: