当前位置:   article > 正文

双向链表 建立和插入_双向链表一个结点有几个指针

双向链表一个结点有几个指针

        单链表有next指针,在查询下一个结点的时间复杂度为O(1),但在查询上一个结点时就会很麻烦,因为每次只能从头指针head开始遍历查找。双向链表就克服了这个缺点。


        双向链表定义:双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以双向链表的每个结点都有两个指针域,分别指向前后结点。


        双向链表特点:
  1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难些;
  2.相对于单向链表, 必然占用内存空间更大一些;
  3.既可以从头遍历到尾, 又可以从尾遍历到头。


-定义结构体-

  1. typedef struct node{
  2. int data;
  3. struct node *pre;
  4. struct node *next;
  5. }Node,*linklist;

-初始化链表-

  1. Node *CreatNode(Node *head)
  2. {
  3. head=(Node*)malloc(sizeof(Node));
  4. if(head == NULL)
  5. {
  6. printf("malloc error!\r\n");
  7. return NULL;
  8. }
  9. head->pre=NULL;
  10. head->next=NULL;
  11. return head;
  12. }

-建立链表-

  1. Node* CreatList(Node * head,int length)
  2. {
  3. if (length == 1)
  4. {
  5. return( head = CreatNode(head));
  6. }
  7. else
  8. {
  9. head = CreatNode(head);
  10. Node * list=head;
  11. for (int i=1; i<length; i++)
  12. {
  13. Node * body=(Node*)malloc(sizeof(Node));
  14. body->pre=NULL;
  15. body->next=NULL;
  16. body->data=rand()%MAX;
  17. list->next=body;
  18. body->pre=list;
  19. list=list->next;
  20. }
  21. }
  22. return head;
  23. }

-双向链表的插入-

双向链表的指针较多,插入时要调整的指针也就更多

例如要将s结点插入在链表的p和第p -> next中间,需要以下四步:

1.把p赋值给s的前驱

2.把p -> next赋值给s的后继

3.把s赋值给p ->next的前驱

4.把s赋值给p的后继

  1. void InsertElem( linklist head , int data ){
  2. linklist tmpHead = head; // 创建一个临时的头结点指针
  3. if( tmpHead->next == NULL ){
  4. /* 当双向链表只有一个头结点时 */
  5. linklist addition = (linklist)malloc( sizeof(linklist) );
  6. assert( addition != NULL );
  7. addition -> data = data;
  8. addition -> next = tmpHead->next;
  9. tmpHead -> next = addition;
  10. addition -> front = tmpHead;
  11. }
  12. else{
  13. /* 当双向链表不只一个头结点时 */
  14. linklist addition = (pElem)malloc( sizeof(linklist) );
  15. assert( addition != NULL );
  16. addition -> data = data;
  17. tmpHead -> next->front = addition;
  18. addition -> front = tmpHead;
  19. addition -> next = tmpHead->next;
  20. tmpHead -> next = addtion;
  21. }
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/456465
推荐阅读
相关标签
  

闽ICP备14008679号