首页 > 代码库 > 数据结构——双链表
数据结构——双链表
双链表的操作
利用链表的尾插法建立双链表:
1 void CreateDlistR(DLNode *&L,int a[],int n){ 2 DLNode *s,*r; 3 int i; 4 L = (DLNode *)malloc(sizeof(DLNode)); 5 L -> prior = NULL; 6 L -> next = NULL; //空的双向链表 7 r = L; //r指向L的头结点也是尾结点 8 for(i = 0;i < n;i++){ 9 s = (DLNode *)malloc(sizeof(DLNode)) 10 s -> data =http://www.mamicode.com/ a[i]; 11 r -> next = s; 12 s -> peror = r; //双链表的相互连接操作 13 r = s; 14 } 15 r -> next =NULL; 16 }
查找结点的算法实现:
1 DLNode* findNode(DLNode *C,int x){ 2 DLNode *p = C -> next; 3 while(p!=NULL){ 4 if(p -> data =http://www.mamicode.com/= x) 5 break; 6 p = p ->next; //没查找一次向右移一次 7 } 8 return p; 9 }
插入算法的实现:
1 s -> next = p -> next; 2 s -> peror = p; 3 p -> next = s; 4 s -> next -> prior = s;
删除算法的实现:
1 q = p -> next; 2 p -> next = q -> next; //相当于p -> next = p -> next -> next 3 q -> next -> peror = p; 4 free(q);循环链表的特点:
无论是循环单链表还是循环多链表,无非就是将链表的尾部终结点与头结点相连接;循环双链表就是头结点的前驱为终结点,终结点的后继为头结点;
判断一个循环链表是否走到了尾部,只需要语句:
p -> next == head
数据结构——双链表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。