美文网首页C++
双向链表C++实现

双向链表C++实现

作者: stefanJi | 来源:发表于2017-05-31 16:49 被阅读0次
#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;
}

相关文章

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • C++语言实现双向链表

    这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大...

  • 容器(2) - LinkedList

    LinkedList 基本实现 LinkedList 类似 C/C++ 的双向链表,这种链表中任意一个存储单元都可...

  • 双向链表python实现

    python 双向链表实现 双向链表实现 链表头部添加 链表尾部添加 插入 删除 查询结点

  • 9.双向链表DoubleLinkList

    目录:1.双向链表的定义2.双向链表的图解3.双向链表定义操作4.双向链表的实现 1.双向链表的定义 2.双向链表...

  • 双向链表C++实现

  • C++实现的简单的双向链表的代码

    下面的资料是关于C++实现的简单的双向链表的内容。 #include using namespace std; s...

  • 五. java数据结构 - 双向链表

    1. 双向链表的操作分析和实现 使用带 head 头的双向链表实现 –水浒英雄排行榜 分析 双向链表的遍历,添加,...

  • 深入分析 LinkedList

    基于JDK 1.8.0。 简介: LinkedList 底层是通过双向链表来实现的。 特点: 底层实现:双向链表 ...

  • C语言中的链表(3)①

    双向链表的实现 双向链表也叫双链表,是链表的一种,它的每个数...

网友评论

    本文标题:双向链表C++实现

    本文链接:https://www.haomeiwen.com/subject/ipjjfxtx.html