*****************/ 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; }
|