当前位置:   article > 正文

【数据结构】单链表建立的头插法和尾插法_头插法和尾插法的优缺点

头插法和尾插法的优缺点

此篇文章主要介绍存在头结点的情况下的头插法和尾插法。

头插法与尾插法

1.头插法与尾插法的优缺点

头插法:优点:在不是空表的情况下,插入结点不需要从头到尾查找直到找到尾结点,效率较高

              缺点:插入的顺序相反

尾插法:优点:插人的顺序相同

               缺点:在不是空表的情况下,插人结点需要从头到尾查找直到找到尾结点,效率低

2.头插法实现与演示

头插法是如何实现的呢

首先,我得先拥有一个空表头,并把头结点指向最后一个录入的结点

 以下为简要代码:

  1. typedef struct _node{
  2. int value;
  3. struct _node *next;
  4. }Node;
  5. Node *head;
  6. head = (Node *)malloc(sizeof(Node));
  7. Node *headnode;
  8. headnode = (Node *)malloc(sizeof(Node));
  9. head->next = headnode;
  10. headnode->next = NULL; //以上为创建一个表头,一般为主函数创建,或单独创建函数调用
  11. //头插简写
  12. Node *C; //简略为主,这里就不对C进行赋值了,默认为C
  13. C = (Node *)malloc(sizeof(Node));
  14. C->next = headnode->next //这时C的next域将会变成空指针域,而下次插入B时由于
  15. //(接上边)已经存在值,B的指针域就不会为空
  16. headnode->next = C; //将头结点指向C
  17. return head;
  18. //注意:不能直接使用,后面会给整体源码

继续头插入一个结点:

  以下为简要代码:

  1. Node *B;
  2. B = (Node *)malloc(sizeof(Node));
  3. B->next = headnode->next
  4. headnode->next = B;
  5. return head;
  6. //与插入C相似

插入A就不再进行展示,与插入B类似

完整代码:

  1. #include<stdio.h>
  2. typedef struct http{
  3. int date;
  4. struct http *next;
  5. }Node;
  6. Node *nodeadd(Node *head,Node *headnode)
  7. {
  8. Node *p;
  9. p = (Node *)malloc(sizeof(Node));
  10. printf("Input your value:\n");
  11. scanf("%d",p->date);
  12. p->next = headnode->next;
  13. headnode->next = p;
  14. return head;
  15. }
  16. int main(void)
  17. {
  18. Node *head;
  19. head = (Node *)malloc(sizeof(Node));
  20. Node *headnode;
  21. headnode = (Node *)malloc(sizeof(Node));
  22. head->next = headnode;
  23. headnode->next = NULL;
  24. head = nodeadd(head,headnode);
  25. return 0;
  26. }

 

 3.尾插法的实现与演示

尾插法是直接顺序插入结点,即向每个结点的后面插人结点

完整代码及解释: 

  1. Node *nodeadd (Node *head,Node *headnode)
  2. {
  3. Node *p = NULL,*pr = headnode ;
  4. //建立一个新节点,同时再建立一个*pr 方便我们后续操作
  5. p = (Node *)malloc(sizeof(Node));
  6. printf("Input your value:");
  7. scanf("%d",&p->date);
  8. //以上操作是判断新建的节点p是否有足够的内存被给予,若没有,则终止程序。
  9. //(注意,此时我并不知道链表是否存在节点)
  10. while (pr->next != NULL)
  11. {
  12. pr = pr->next;
  13. }
  14. pr->next = p;
  15. //while语句的作用:当链表不是空链表时,我们得找到最后一个节点后,再将最后一个节点与新建节点链接起来
  16. p->next = NULL; //将该节点作为新表尾
  17. return head;
  18. }

 

以上就是头插法和尾插法的全部内容啦

如果有不对的地方请指出~笔者会及时改正~

多多担待啦~ 

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

闽ICP备14008679号