当前位置:   article > 正文

数据结构——单向链表-双向链表_单向链表双向链表

单向链表双向链表

1、单向链表按位置修改

  1. //按位置修改
  2. int updata_pos(linklist *L,int pos,datatype new_e)
  3. {
  4. if(NULL==L||empty(L)||pos<1||pos>L->len)
  5. {
  6. printf("修改失败\n");
  7. return -1;
  8. }
  9. linklist *p=find_node(L,pos);
  10. p->data=new_e;
  11. printf("修改成功\n");
  12. return 0;
  13. }

2、单向链表的反转——非递归方式 

  1. //链表反转
  2. void list_reverse(linklist *L)
  3. {
  4. if(NULL==L||empty(L))
  5. {
  6. printf("反转失败\n");
  7. return ;
  8. }
  9. //方案一:头插反转
  10. /* linklist *p=L->next;
  11. linklist *q=p->next;
  12. for(int i=0;i<L->len-1;i++)
  13. {
  14. p->next=q->next;
  15. q->next=L->next;
  16. L->next=q;
  17. q=p->next;
  18. }
  19. //方案二:
  20. linklist *q=L->next;
  21. linklist *p=find_node(L,L->len);
  22. for(int i=0;i<L->len-1;i++)
  23. {
  24. L->next=q->next;
  25. q->next=p->next;
  26. p->next=q;
  27. q=L->next;
  28. }*/
  29. }

 3、双向链表尾插

  1. //尾插
  2. int tail_add(doublelink *D,datatype e)
  3. {
  4. if(NULL==D)
  5. {
  6. printf("插入失败\n");
  7. return -1;
  8. }
  9. doublelink *q=D;
  10. while(q->next!=NULL)
  11. {
  12. q=q->next;
  13. }
  14. doublelink *p=node_buy(e);
  15. p->prio=q;
  16. p->next=q->next;
  17. q->next=p;
  18. D->len++;
  19. return 0;
  20. }

 双向链表头删

  1. //头删
  2. int head_del(doublelink *D)
  3. {
  4. if(NULL==D||empty(D))
  5. {
  6. printf("删除失败\n");
  7. return -1;
  8. }
  9. doublelink *q=D->next;
  10. q->next->prio=D;
  11. D->next=q->next;
  12. free(q);
  13. D->len--;
  14. q=NULL;
  15. }

双向链表按值修改

  1. //按值修改
  2. int mod_value(doublelink *D,datatype old_e,datatype new_e)
  3. {
  4. if(NULL==D||empty(D))
  5. {
  6. printf("修改失败\n");
  7. return -1;
  8. }
  9. doublelink *q=D->next;
  10. for(int i=0;i<D->len;i++)
  11. {
  12. if(q->data==old_e)
  13. {
  14. q->data=new_e;
  15. }
  16. q=q->next;
  17. }
  18. return 0;
  19. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号