#cat list.cc
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std; #include "osstat.h" class Node {
public:
int data;
Node *pPre, *pNext;
}; class DoubleLinkList {
public:
DoubleLinkList() {
head = new Node;
head->data = 0;
head->pNext = NULL;
head->pPre = NULL;
}
~DoubleLinkList() {delete head;}
void CreateLinkList(int n); //Create linklist
void InsertNode(int position, int d); //Insert into linklist
void TraverseLinkList(); //Traversal linklist
bool IsEmpty(); //If linklist is empty
int GetLength(); //Get linklist's length
void DeleteNode(int position); //Delete linklist's element
void DeleteLinkList(); //Delete linklist
private:
Node *head;
}; void DoubleLinkList::CreateLinkList(int n) {
if (n < 0) {
cout << "Your intput of this linklist's node count not correct!" << endl;
exit(EXIT_FAILURE);
}
else {
int i = 0;
Node *pnew, *ptemp;
ptemp = head;
i = n;
while (n-- > 0) {
cout << "Please input the number" << i - n << "node value:";
pnew = new Node;
cin >> pnew->data;
pnew->pNext = NULL;
pnew->pPre = ptemp;
ptemp->pNext = pnew;
ptemp = pnew;
}
}
} void DoubleLinkList::InsertNode(int position, int d) {
if (position < 0 || position > GetLength() + 1){
cout << "输入位置错误!" << endl;
exit(EXIT_FAILURE);
}
else {
Node *pnew, *ptemp;
pnew = new Node;
pnew->data = d;
ptemp = head; while (position-- > 1)
ptemp = ptemp->pNext; if (ptemp->pNext != NULL)
ptemp->pNext->pPre = pnew;
pnew->pNext = ptemp->pNext;
pnew->pPre = ptemp;
ptemp->pNext = pnew;
ptemp = pnew;
}
} void DoubleLinkList::TraverseLinkList() {
Node *ptemp = head->pNext;
while (ptemp != NULL) {
cout << ptemp->data << " ";
ptemp = ptemp->pNext;
}
cout << endl;
} bool DoubleLinkList::IsEmpty() {
if (head->pNext == NULL)
return true;
else
return false;
} int DoubleLinkList::GetLength() {
int n = 0;
Node *ptemp = head->pNext;
while (ptemp != NULL) {
n++;
ptemp = ptemp->pNext;
}
return n;
} void DoubleLinkList::DeleteNode(int position) {
if (position < 0 || position > GetLength()) {
cout << "输入数据错误!" << endl;
exit(EXIT_FAILURE);
}
else {
Node *pdelete, *ptemp;
ptemp = head; while (position-- > 1)
ptemp = ptemp->pNext;
pdelete = ptemp->pNext;
if (pdelete->pNext != NULL)
pdelete->pNext->pPre = ptemp;
ptemp->pNext = pdelete->pNext;
delete pdelete;
pdelete = NULL;
}
} void DoubleLinkList::DeleteLinkList() {
Node *pdelete, *ptemp;
pdelete = head->pNext;
while (pdelete != NULL) {
ptemp = pdelete->pNext;
head->pNext = ptemp;
if (ptemp != NULL)
ptemp->pPre = head;
delete pdelete;
pdelete = ptemp;
}
} int main() {
DoubleLinkList dl;
int position = 0, value = 0, n = 0;
bool flag = false; cout << "请输入需要创建双向链表的结点个数:";
cin >> n;
dl.CreateLinkList(n); cout << "打印链表值如下:";
dl.TraverseLinkList(); cout << "请输入插入结点的位置和值:";
cin >> position >> value;
dl.InsertNode(position, value); cout << "打印链表值如下:";
dl.TraverseLinkList(); cout << "请输入要删除结点的位置:";
cin >> position;
dl.DeleteNode(position); cout << "打印链表值如下:";
dl.TraverseLinkList(); dl.DeleteLinkList();
flag = dl.IsEmpty();
if (flag)
cout << "删除链表成功!" << endl;
else
cout << "删除链表失败!" << endl; return 0;
}

c++ list双向链表管理对象的更多相关文章

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

随机推荐

  1. Android 录制屏幕的实现方法

    Android 录制屏幕的实现方法 Chrome   2017-02-15 15:32:01 发布 您的评价:       5.0   收藏     0收藏 长久以来,我一直希望能够直接从Androi ...

  2. Linux下一款可以使用命令行的pdf阅读器

    Zathura是linux下一款用命令行控制打pdf阅读器,并且基本打使用方法和vim很相似.对于喜欢键盘操作的用户来说的确是一个不错的选择. ubuntu下的安装命令: sudo apt-get i ...

  3. sql_server_action

    ''' SELECT * FROM Info_Roles WHERE Flag=1 LIMIT 2; select top y * from 表 where 主键 not in(select top ...

  4. oc80--copy

    // // main.m // Copy基本使用,拷贝的本质:修改其中一个不能影响另外一个. // 每个oc对象都有copy和mutableCopy方法,前提是必须遵守NSCopying协议实现cop ...

  5. 快速编译system.img和boot.img的方法【转】

    本文转载自:http://www.cnblogs.com/wanqieddy/archive/2012/10/22/2734024.html 快速编译system.img,可以使用这个命令: #mak ...

  6. bzoj 1935 Tree 园丁的烦恼

    题目大意: 一些点,每次查询一个矩形内有多少个点 思路: 因为空间太大 所以不能用什么二维树状数组 需要把这些点和所有查询的矩阵的左下和右上离线下来 先离散化 然后每个子矩阵像二维前缀和那样查询 按照 ...

  7. [ZJOI 2009] 假期的宿舍

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1433 [算法] 二分图匹配[代码] #include<bits/stdc++. ...

  8. Luogu4198 楼房重建

    https://zybuluo.com/ysner/note/1124880 题面 带修改的区间维护最大斜率. 题面 解析 用线段树区间维护斜率. 考虑如何向上合并. 左半段一定有贡献. 如果左半段的 ...

  9. HDU4336:Card Collector

    题意 有n张卡片,每一次 有pi的概率买到第i张卡.求买到所有卡的期望购买次数. n<=20 解析 Solution 1:大力状压(就是步数除以方案数) #include<iostream ...

  10. it人必进的几大网站

    1.chinaunix网址:http://www.chinaunix.net/简介:中国最大的linux/unix技术社区. 2.itpub网址:http://www.itpub.net/ 简介:有名 ...