c/c++开发分享C++数据结构之双向链表

本文实例为大家分享了c++数据结构之双向链表的具体代码,供大家参考,具体内容如下#include <iostream>using std::cout;using std::endl;str

c/c++开发分享C++数据结构之双向链表实例为大家分享了c++数据结构之双向链表的具体代码,供大家参考,具体内容如下

C++数据结构之双向链表

#include <iostream>  using std::cout;  using std::endl;  struct node  {      int data;      struct node * next;      struct node * pre;  };

一、创建双向链表

node * createlist()  {      node * head = new node;      if (null == head)          exit(-1);      head->next = head;      head->pre = head;      return head;  }

二、插入元素(头插法)

让新来的节点先有所指

C++数据结构之双向链表

void insertlist(node * head,int n)  {      node * cur = new node;      if (null == cur)          exit(-1);      cur->next = head->next;      cur->pre = head;      head->next = cur;      cur->next->pre = cur;            cur->data = n;  }

三、链表长度

int lenlist(node * head)  {      int i = 0;      node * t = head->next;      while (t != head)      {          i++;          t = t->next;      }      return i;  }

四、查找遍历

C++数据结构之双向链表

node * findlist(node * head,int fn)  {      node * forward = head->next;      node * back = head->pre;      while (forward != back->next)      {          if (forward->data == fn)              return forward;          if (back->data == fn)              return back;          if (forward == back)              break;          forward = forward->next;          back = back->pre;      }      return null;  }

五、删除其中元素

void deletelist(node * pfind)  {      pfind->pre->next = pfind->next;      pfind->next->pre = pfind->pre;      delete pfind;  }

六、排序

(类似于先删除 再插入)

C++数据结构之双向链表

void sortdlist(node * head)  {      int len = lenlist(head);      node *prep = null;      node *p = null;      node *q = null;      node *t = null;      for (int i = 0;i < len - 1;i++)      {          p = head->next;          q = p->next;          for (int j = 0;j < len - 1 - i;j++)          {              if ((p->data)<(q->data))              {                  p->pre->next = q;                  q->pre = p->pre;                    p->next = q->next;                  p->pre = q;                    q->next = p;                  p->next->pre = p;                    t = p;                  p = q;                  q = t;              }              p = p->next;              q = q->next;          }      }  }

七、销毁链表

void deslist(node * head)  {      head->pre->next = null;      node *t = null;      while (head != null)      {          t = head;          head = head->next;          delete t;      }  }

以上就是c/c++开发分享C++数据结构之双向链表的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<猴子技术宅>。

需要了解更多c/c++开发分享C++数据结构之双向链表,都可以关注C/C++技术分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/1240202.html

(0)
上一篇 4天前
下一篇 4天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。