/**//************************************************************* * FileName: doubleLink.cpp * Description: implemention for doublelink * Author: Cui Xiaofeng * Date: 2008/04/23***************************************************************/#include <iostream>#include <ctime>using namespace std;/**//* 链表节点类 */class Dnode...{public: Dnode(int _data, Dnode *_next = NULL, Dnode *_prev = NULL) ...{ data = _data; next = _next; prev = _prev; } friend class Dlink;private: int data; Dnode *next; Dnode *prev;};/**//* 双向链表类 */class Dlink...{public: Dlink(Dnode *_head = NULL):head(_head) ...{} ~Dlink(); Dnode* CreateDlink(); Dnode* Insert(int key, int position); Dnode* Delete(int key); void Print(); int Length();private: Dnode *head;};Dnode* Dlink::CreateDlink()...{ srand(time(NULL)); for (int i = 0; i < 10; i++) ...{ Dnode *temp = new Dnode(rand() % 100, head, NULL); if (head != NULL) ...{ head->prev = temp; } head = temp; } return head;}/**//* 在链表的位置position(从1开始), 插入key的节点 */Dnode* Dlink::Insert(int key, int position)...{ Dnode *p = head; int i = 0; if (NULL == head) ...{ head = new Dnode(key, NULL, NULL); return head; } else if (position == 1) ...{ Dnode *temp = new Dnode(key, head, NULL); head = temp; return head; } while (p->next != NULL) ...{ i++; if (i == position - 1) ...{ break; } p = p->next; } Dnode *pNext = p->next; Dnode *temp = new Dnode(key, pNext, p); if (pNext != NULL) ...{ pNext->prev = temp; } p->next = temp; return head;}/**//* 从链表中删除等于key的节点 */Dnode* Dlink::Delete(int key)...{ Dnode *p = NULL; for (p = head; p != NULL; p = p->next) ...{ if (p->data == key) ...{ break; } } if (NULL == p) ...{ fprintf(stderr, "no the data!"); return head; } else if (p == head) ...{ head = p->next; } else ...{ p->prev->next = p->next; if (p->next != NULL) ...{ p->next->prev = p->prev; } } return head;}Dlink::~Dlink()...{ Dnode *temp = NULL; for (Dnode *p = head; p != NULL; ) ...{ temp = p->next; delete p; p = temp; }}/**//* 计算链表中元素的个数 */int Dlink::Length()...{ int i = 0; for (Dnode *p = head; p != NULL; p = p->next) ...{ i++; } return i;}void Dlink::Print()...{ for (Dnode *p = head; p != NULL; p = p->next) ...{ printf("%d ", p->data); }}/**//* 测试程序 */int main()...{ Dlink d; d.CreateDlink(); d.Print(); d.Insert(1234, 3); cout << "inset 1234:" << endl; d.Print(); cout << "delete 1234:" << endl; d.Delete(1234); d.Print(); cout << endl << d.Length() << endl; return 0;}