当前位置:   article > 正文

数据结构--双向链表

数据结构--双向链表

1.双向链表的结构设计

typedef struct DNode
{
int data;
struct DNode* next;//后继指针
struct DNode* prio;//前驱指针
}DNode ,*DList;

2.双向链表的结构示意图:

image-20230607152652543.png


3.双向链表的实现

  1. //初始化
  2. p->prio->next = p->next;
  3. if (p->next != NULL)//判断很重要
  4. {
  5. p->next->prio = p->prio;
  6. }
  7. free(p);
  8. return true;
  9. }
  10. //返回key的前驱地址,如果不存在返回NULL;
  11. DNode* GetPrio(DList plist, int key)
  12. {
  13. DNode* p = Search(plist, key);
  14. return p == NULL ? NULL : p->prio;
  15. }
  16. //返回key的后继地址,如果不存在返回NULL;
  17. DNode* GetNext(DList plist, int key)
  18. {
  19. DNode* p = Search(plist, key);
  20. return p == NULL ? NULL : p->next;
  21. }
  22. //输出
  23. void Show(DList plist)
  24. {
  25. for (DNode *p = plist->next; p != NULL; p = p->next)
  26. {
  27. printf("%d ", p->data);
  28. }
  29. printf("\n");
  30. }
  31. //清空数据
  32. void Clear(DList plist)
  33. {
  34. Destroy(plist);
  35. }
  36. //销毁整个内存
  37. void Destroy(DList plist)
  38. {
  39. assert(plist != NULL);
  40. if (plist == NULL)
  41. return;
  42. //总是删除第一个节点
  43. DNode* p;
  44. while (plist->next != NULL)
  45. {
  46. p = plist->next;
  47. plist->next = p->next;
  48. //可以不用处理
  49. /*if (p->next != NULL)
  50. {
  51. p->next->prio = plist;
  52. }*/
  53. free(p);
  54. }
  55. }

4.双向链表的总结

双向链表其实和单链表一样,就是把两条方向的单链表都处理好就行.
双向链表的考点就是多级指针,一定要注意判断;

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

闽ICP备14008679号