#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. iOS常用的正则表达式总结

    /* 正则表达式说明: . 匹配除换行符以外的任意字符 \\w 匹配字母或数字或下划线或汉字 \\s 匹配任意的空白符 \\d 匹配数字 \\b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字 ...

  2. FFmpeg滤镜使用指南

    文件夹 1. FFmpeg滤镜文档 2. 演示样例   2.1 缩放   2.2 视频加速   2.3 滤镜图,链和滤镜关系   2.4 多个输入覆盖同一个2x2 网格   2.5 转义字符   2. ...

  3. 【bzoj1082】栅栏[SCOI2005]

    显然我们取的肯定是前ans块木板.然后砍的木材也应该是从小到大砍(如果小的木材可以满足条件,就一定不会去动大的木材) 所以两遍排序. 二分答案. 然后对于要取的每块木板,我们搜索它是在第x块木板上砍下 ...

  4. c++编译常见错误原因集中

    1 c++ compiler error c4430 "c++ doesn't support default int" 1.1 可能的原因之一 我用了在一个头文件中定义的宏,但是 ...

  5. 【转】android-修改TextView中部分文字的颜色

    textView = (TextView) findViewById(R.id.textview); SpannableStringBuilder builder = new SpannableStr ...

  6. bzoj2982 combination——卢卡斯定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982 卢卡斯定理裸题: 原准备1A来着,结果输出忘了加回车! 预处理阶乘或者现求都可以,感觉 ...

  7. Flume Avor Source

    1.cd /usr/local2/flume/conf sudo vim avro.conf: a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Des ...

  8. Spark中统计程序运行时间

    import java.text.SimpleDateFormat import java.util.Date val s=NowDate() //显示当前的具体时间 val now=new Date ...

  9. SQL使用IN参量不能超过1000的表现形式以及解决办法

    如果出现这个错误说明你传的参量是超过了一千个值:列如,你拼接了1001个id: 如何解决那,我这里提供两种方法: 1.每1000条加一个or in 列: 原:select p.* from t_pre ...

  10. 分享两篇关于ActionBar样式设置的博客

    http://www.open-open.com/lib/view/open1373981182669.html http://blog.csdn.net/xyz_lmn/article/detail ...