#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. Codeforces Round #273 (Div. 2) B . Random Teams 贪心

    B. Random Teams   n participants of the competition were split into m teams in some manner so that e ...

  2. bzoj 5127 数据校验

    题目大意: 一个数列a 对于 a 的一个区间 [l, r],若对于该区间 [l, r] 内的任意一个非空连续子区间,该子区间内出现过的数值在整数上值域连续,则称 [l, r]为合法区间 m次询问  每 ...

  3. Python三次登陆

    题目:Python实现三次登陆 不要急于马上把三次登陆写出来,一定要将复杂的程序简单化,必须一步一步地去扩展,这样才保证不会出错. 步骤一:实现简单的一次登陆 # 事先定义 user = 'dark_ ...

  4. [App Store Connect帮助]二、 添加、编辑和删除用户(3)添加和编辑用户

    您可以在“用户和访问”中添加和编辑用户. 如果您以个人名义在“Apple 开发者计划”注册,您可以授权用户访问您 App Store Connect 中的内容.所有用户只拥有 App Store Co ...

  5. Akka源码分析-Remote-Actor创建

    在之前的博客中,我们分析过local模式下Actor的创建过程,最终还是调用了provider的actorOf的函数创建了Actor,在remote模式下provider就是RemoteActorRe ...

  6. Oracle group by分组拼接字符串

    select wm_concat(id),depon  from test_1  group by depon

  7. ACM_三角形蛇形矩阵

    三角形蛇形矩阵 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小铠觉得各类题型是要温故而知新的,所以他叫小发出一道类似做过的题. ...

  8. cocos2d-x 调用第三方so文件

    一:假设.so文件名称 : libhi.so 1.jni文件下创建一个prebuilt 2.android.mk文件中找到  include $(CLEAR_VARS), 在这句后面添加如下代码 in ...

  9. Linq学习(四)-联合查询

    一.本将主要介绍 Union.Concat.Intersect.Except的使用操作 1.Union 查询昵称中带有Friend和带有Lee的用户 Linq (from a in Blog_User ...

  10. 联想 K10(K10e70) 免解锁BL 免rec Magisk Xposed 救砖 ROOT 版本号 S206

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...