创建双向链表类,该类有默认构造函数、类的拷贝函数、类的、实现链表添加数据、升序排序、查找链表中某个节点及删除链表中某个节点的操作

代码实现:

#include<iostream>
#include<string.h>
using namespace std; typedef int ElemData; struct node{ //节点类
ElemData data;
node *next;
node *prev;
}; class LinkList //双向链表类
{
public:
node *head;//指向头结点
node *tail;//指向尾节点
int len;//链表长度
public:
LinkList();//构造函数
LinkList(const LinkList &l);//拷贝函数
~LinkList();//析构函数
void addNode(ElemData data);//往尾部添加元素
void upSort();//升序排序
void findNode(int n);//查找某个节点
void delNode(int n);//删除某个节点
void showNode();//输出所有节点数据
}; LinkList::LinkList()
{
head = NULL;
tail = NULL;
len = ;
} LinkList::LinkList(const LinkList &l)
{
if(l.head!=NULL)
{
node *pHc = l.head;
head = new node();//为节点申请空间
head->data = pHc->data;
len++;
pHc = pHc->next;
node *pH = head;
while(pHc!=l.tail)
{
pH->next = new node();
len++;
pH->data = pHc->data;
pHc = pHc->next;
}
}
else
{
head=tail=NULL;
len = ;
}
}
LinkList::~LinkList()
{
node *bgn = head;
while(head!=tail)
{
head = head->next;
delete bgn;//释放内存
bgn = head;
}
len = ;
} void LinkList::addNode(ElemData data)
{
if(head==NULL)
{
head = new node();
head->data = data;
len++;
tail = head;
}
else
{
tail->next = new node();
tail->next->data = data;
len++;
tail->next->prev = tail;
tail = tail -> next;
}
} void LinkList::showNode()
{
node *p;
p=head;
if(p==NULL)
cout<<"List id empty"<<endl;
else
{
while(p!=tail->next)
{
cout<<p->data<<" ";
p = p ->next;
}
cout<<endl;
}
} void LinkList::upSort()
{
node *p,*q;
ElemData temp;
for(p=head;p!=tail->next;p=p->next)
{
for(q=p->next;q!=tail->next;q=q->next)
{
if(p->data>q->data)
{
temp = p->data;
p->data = q->data;
q->data = temp;
}
}
}
}
void LinkList::findNode(int n)
{
node *p;
p = head;
if(n>len)
cout<<"超出链表长度";
else
{
for(int i=;i<n;i++)
{
p = p->next;
}
cout<<"该节点是:"<<p->data<<endl;
}
}
void LinkList::delNode(int n)
{
node *p,*q;
p = head;
q = head->next;
if(n>len)
cout<<"超出链表长度";
else
{
for(int i=;i<n;i++)
{
p = p->next;
q = q->next;
}
p->next = q->next;
q->next->prev = p;
delete q;
}
} int main()
{
int n;
LinkList lin;
cout<<"插入节点:"<<endl;
lin.addNode();
lin.addNode();
lin.addNode();
lin.addNode();
lin.addNode();
lin.addNode();
lin.addNode();
lin.addNode();
lin.showNode();
lin.upSort();
cout<<"输出所有节点:"<<endl;
lin.showNode();
cout<<"输入要查找第几个节点:"<<endl;
cin>>n;
lin.findNode(n);
cout<<"输入要删除第几个节点:"<<endl;
cin>>n;
lin.delNode(n);
lin.showNode();
return ;
}

实现效果图:

C++编写双向链表的更多相关文章

  1. BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap

    1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...

  2. 二元查找树转变成排序的双向链表之C#算法实现

    此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试 ...

  3. Java编写高质量代码改善程序的151个建议

    第一章  Java开发中通用的方法和准则 建议1:不要在常量和变量中出现易混淆的字母: (i.l.1:o.0等). 建议2:莫让常量蜕变成变量: (代码运行工程中不要改变常量值). 建议3:三元操作符 ...

  4. C语言一个双向链表的实现

    首先编写头文件,头文件里做相关的定义和声明,DList.h内容如下: #ifndef DList_H #define DList_H typedef int Item; typedef struct ...

  5. 玩转C线性表和单向链表之Linux双向链表优化

    前言: 这次介绍基本数据结构的线性表和链表,并用C语言进行编写:建议最开始学数据结构时,用C语言:像栈和队列都可以用这两种数据结构来实现. 一.线性表基本介绍 1 概念: 线性表也就是关系户中最简单的 ...

  6. c/c++ 线性表之双向链表

    c/c++ 线性表之双向链表 线性表之双向链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点是NULL. 真实 ...

  7. Linux 内核里的数据结构:双向链表

    原文:https://blog.csdn.net/qq_33487044/article/details/78827260 双向链表 Linux 内核自己实现了双向链表,可以在 include/lin ...

  8. 编写高质量java代码151个建议

    http://blog.csdn.net/aishangyutian12/article/details/52699938 第一章  Java开发中通用的方法和准则 建议1:不要在常量和变量中出现易混 ...

  9. 【Java】 大话数据结构(5) 线性表之双向链表

    本文根据<大话数据结构>一书,实现了Java版的双向链表. 在每个数据结点中都有两个指针,分别指向直接后继和直接前驱,这样的链表称为双向链表. 双向链表的结构如图所示: 查找元素可以根据元 ...

随机推荐

  1. Struts2学习第五课 通过和ServletAPI耦合的方式获取WEB资源

    与Servlet耦合的访问方式 直接访问Servlet API将使Action与环境Servlet环境耦合在一起,测试时需要有Servlet容器,不便对Action的单元测试. 直接获取HttpSer ...

  2. Spring入门第二十二课

    重用切面表达式 我们有的时候在切面里面有多个函数,大部分函数的切入点都是一样的,所以我们可以声明切入点表达式,来重用. package logan.study.aop.impl; public int ...

  3. Django 之 auth 模块

    Django 内置一个 auth 模块,帮助用户实现注册.登录.注销以及修改密码等功能,帮助开发者省去了很多功夫. auth 模块 在创建模型时,Django内部会生成一个名为 auth_user 的 ...

  4. Android xUtils框架(一) DbUtils

    在DbUtils中,只支持4中数据类型: public enum ColumnDbType { INTEGER("INTEGER"), REAL("REAL") ...

  5. Java Script 学习笔记 -- Ajax

    AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...

  6. jquery事件之事件

    事件名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) blur() 获得失去鼠标光标焦点事件 jQueryObject.blur( [ ...

  7. 关于pacemaker监控mysql修复的方法

    对工作中,涉及到数据库修复的一个简单汇总 1.在所有的控制节点上,执行pcs resource命令行,查看控制节点上pacemaker的状态是否异常,如果异常,通过crm_resource -P命令行 ...

  8. BKMigration

    PAAS 1.   停止服务 ./bkcec stop paas 2.   修改install.config 3.   删除中控机 /data/install/.bk_install.step 和原p ...

  9. 三层登录——C#版

    前言 前期了解三层架构主要是由UI层.BLL层和DAL层三部分构成.看到大牛们都采用三层的思想实现了登录,本菜鸟暗暗地站在了他们的肩膀上. 自己理解 对于三层自己的理解是:就像我们对一个大型的公司去找 ...

  10. rem 回家测试

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...