日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++數據結構之雙向鏈表_C 語言

作者:W...Z ? 更新時間: 2022-07-25 編程語言

本文實例為大家分享了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;
}

二、插入元素(頭插法)

讓新來的節點先有所指

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;
}

四、查找遍歷

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;
}

六、排序

(類似于先刪除 再插入)

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;
?? ?}
}

原文鏈接:https://blog.csdn.net/qq_42972267/article/details/86561274

欄目分類
最近更新