双向链表实现,通过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;
}

双向链表C++实现的更多相关文章

  1. 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

  2. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  3. 剑指Offer面试题:25.二叉搜索树与双向链表

    一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...

  4. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  5. Linux 内核数据结构:双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  6. 线性表-双向链表(LinkedList)

    双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...

  7. Shuffling Machine和双向链表

    1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...

  8. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  9. javascript中的链表结构—双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  10. Java自己实现双向链表LinkList

    /** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...

随机推荐

  1. 企业级任务调度框架Quartz(3) 一个简单的Quartz 例子

    1. 一个简单的Quartz 工程     本示例应用比起众所周知的 System.out.println("Hello world from Quartz") 来还是要有趣些.当 ...

  2. Docker镜像的备份和恢复

    备份: docker save -o [tar包真实路径] [镜像名 ] 如:docker save -o /usr/docker_data/mongo-backup.tar mongo   导出: ...

  3. A*寻路算法详解

    以我个人的理解: A*寻路算法是一种启发式算法,算法的核心是三个变量f,g,h的计算.g表示 从起点 沿正在搜索的路径 到 当前点的距离,h表示从当前点到终点的距离,而f=g+h,所以f越小,则经过当 ...

  4. SSH启动失败解决方法

    今天连接linux时居然连不上,报错信息是: 查了一下终于找到了解决办法,只需要一些命令 : cd /etc/ssh sudo chmod 644 ./* sudo chmod 600 ssh_hos ...

  5. 【udacity】机器学习-波士顿房价预测

    import numpy as np import pandas as pd from Udacity.model_check.boston_house_price import visuals as ...

  6. Project Euler 24 Lexicographic permutations( 康拓逆展开 )

    题意: 排列指的是将一组物体进行有顺序的放置.例如,3124是数字1.2.3.4的一个排列.如果把所有排列按照数字大小或字母先后进行排序,我们称之为字典序排列.0.1.2的字典序排列是:012 021 ...

  7. windows 查看端口号被占用

    1.netstat  -ano 2.tasklist | findstr xxx 3.进程管理杀掉

  8. 提高生产力:发送邮件API和Web服务(包含源码)

    在Web开发中,发邮件是一种非常常见的功能或任务. 发送邮件的6种方式 一文提到了6种方法,文章发表后,有网友指出了还有另外一种方法,Ant中也可以发送邮件. 打开Foxmail之类的邮件客户端或者在 ...

  9. spring bean的作用域和自动装配

    1 Bean的作用域 l  singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象  默认是单列 l  prototype原型: 每次获取bean都产生一个新的对象,比如Ac ...

  10. plsql里面执行正常,java运行报ORA-01722: 无效数字

    贴代码: <select id="getInfo" parameterClass="java.util.HashMap" resultClass=&quo ...