双向链表实现,通过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. C++文本操作.Vs.Python

    C++利用文件流: (1):读取一个字符 std::string TestTxt(argv[3]); // freopen(TestTxt.c_str(),"r",stdin);/ ...

  2. tomcat_logs

    tomcat logs 目录下各日志文件的含义 参考地址: http://www.cnblogs.com/signheart/p/0ed0bef7dfadf59534eec76ad4607654.ht ...

  3. .bat 打开程序

    为什么要用.bat打开程序. 因为一个一个难得点 怎么做 百度的,start 程序路径\程序 改进 点击bat,不显示dos窗口. 新建.vbs文件 Set shell = Wscript.creat ...

  4. win系统如何在桌面显示我的电脑

    如果是在Windows Server 2012本地控制台下,直接按Win(键盘上的微软徽标键)+R,输入: rundll32.exe shell32.dll,Control_RunDLL desk.c ...

  5. JS 20180415作业

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 【udacity】机器学习-决策树

    Evernote Export 1.监督学习 我们向系统中输出样本,并且告诉系统样本标签(target),系统用我们给出的不同样本的成功与失败的信息,构建它对成功或失败的因素的理解. 2.分类与回归之 ...

  7. [置顶] 来自 HeroKu 的 HTTP API 设计指南(中文版)

    转载:http://get.jobdeer.com/343.get 来自 HeroKu 的 HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国 ...

  8. Project Euler 27 Quadratic primes( 米勒测试 + 推导性质 )

    题意: 欧拉发现了这个著名的二次多项式: f(n) = n2 + n + 41 对于连续的整数n从0到39,这个二次多项式生成了40个素数.然而,当n = 40时402 + 40 + 41 = 40( ...

  9. [caffe] caffe训练tricks

    Tags: Caffe Categories: Tools/Wheels --- 1. 将caffe训练时将屏幕输出定向到文本文件 caffe中自带可以画图的工具,在caffe路径下: ./tools ...

  10. EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图

    使用EasyUI时,有个经常遇到的问题,页面还没有渲染完成的时候,就展现了. 刚刚开始很混乱,等加载完成后,就好了. 参考这篇文章http://blog.csdn.net/zheng0518/arti ...