加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

C++达成双向链表

发布时间:2021-11-15 13:39:23 所属栏目:PHP教程 来源:互联网
导读:双向链表实现,通过C++实现 #ifndef LinkList_hpp #define LinkList_hpp typedef struct Node{ int data; Node* next; Node* pre; }Node; class LinkList{ private: Node *head; Node *tail; int length; public: LinkList(); //分配内存,构建节点 Node* ma

双向链表实现,通过C++实现
 
#ifndef LinkList_hpp
#define LinkList_hpp
 
typedef struct Node{
    int data;
    Node* next;
    Node* pre;
}Node;
 
class LinkList{
private:
    Node *head;
    Node *tail;
    int length;
public:
    LinkList();
    //分配内存,构建节点
    Node* makeNode();
    //添加节点到链表尾
    bool push(int data);
    //弹出链表最后一个节点,并返回值
    int pop();
    //通过index来查找链表中的元素
    int objectAt(int index);
    //插入元素到指定位置的前方
    bool insert(int index,int data);
    //打印链表的所有元素
    void display();
};
 
#endif /* LinkList_hpp */
#include "LinkList.hpp"
#include <iostream>
#include <mm_malloc.h>
 
using namespace std;
 
LinkList::LinkList(){
    head = makeNode();
    tail = head;
    length = 0;
}
 
Node * LinkList::makeNode(){
    Node* node = (Node*)malloc(sizeof(Node));
    return node;
}
 
bool LinkList::push(int data){
    Node *node = makeNode();
    if(!node){
        return false;
    }
    node->data = data;
    node->pre = tail;
    tail->next = node;
    tail = node;
    length ++;
    return true;
}
 
int LinkList::pop(){
    int data = 0;
    Node* node = head->next;
    while (node->next) {
        node = node->next;
    }
    data = node->data;
    tail = node->pre;
    tail->next = node->next;
    length--;
    free(node);
    node = NULL;
    return data;
}
 
int LinkList::objectAt(int index){
    if(index<1 || index > length){
        return 0;
    }
    int data = 0;
    Node* q = head;
    for(int i=0; i < index;i++){
        q = q->next;
    }
    data = q->data;
    return data;
}
 
bool LinkList::insert(int index, int data){
    if(index<1 || index> length){
        return false;
    }
    Node *p = makeNode();
    p->data = data;
    Node *q = head;
    for(int i=0; i < index; i++){
        q = q->next;
    }
    p->pre = q->pre;
    p->next = q;
    q->pre->next = p;
    q->pre = p;
    length ++;
    return true;
}
 
void LinkList::display(){
    Node *n = head->next;
    cout<<"data:";
    while (n) {
        cout<<n->data<<" ";
        n = n->next;
    }
    cout << endl;
}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读