(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
http://blog.csdn.net/fisherwan/article/details/25649073
链表(三)实现双向链表操作,代码如下:
- <span style="font-size:18px;" deep="5">#include <iostream>
- #include <stdio.h>
- using namespace std;
- //结点类
- 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); //创建链表
- void InsertNode(int position, int d); //在指定位置处插入结点
- void TraverseLinkList(); //遍历链表
- bool IsEmpty(); //判断链表是否为空
- int GetLength(); //获得链表长度
- void DeleteNode(int position); //删除指定位置处结点
- void DeleteLinkList(); //删除链表
- private:
- Node *head;
- };
- void DoubleLinkList::CreateLinkList(int n) {
- if (n < 0) {
- cout << "输入结点个数错误!" << endl;
- exit(EXIT_FAILURE);
- }
- else {
- int i = 0;
- Node *pnew, *ptemp;
- ptemp = head;
- i = n;
- while (n-- > 0) {
- cout << "请输入第" << i - n << "个结点值:";
- 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;
- }</span>
(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作相关推荐
- php上传图片到数据库2020,弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库
弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库 弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库 php连接数据库 连库基本操作 首先找到php.ini 文件中的 ...
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
http://blog.csdn.net/fisherwan/article/details/25649271 链表(四)实现双向循环链表简单操作,代码如下: [cpp] view plain cop ...
- 链表(创建,插入,删除和打印输出
http://www.bianceng.cn/Programming/C/200705/327.htm (以下不全,去此网址看) 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了 ...
- 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表
SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...
- c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
#define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...
- 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。
1.1 二叉搜索树的插入 二叉搜索树的概念相信大家都很清楚,无非就是左小右大 创建二叉搜索树,其实就是多次调用二叉搜索树的插入方法,所以首先我们来讲讲如何插入节点到二叉搜索树里,假设一颗二叉搜索树如下 ...
- MySQL 索引的创建、删除和查看操作
ybm(使用部门)一般只有几条记录,除了主关键字外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问 1.索引作用 在索引列 ...
- C/C++创建和删除文件夹操作(包含多级)
下面给出创建单个文件夹的方法,每一种方法后面都紧跟着对应的删除文件夹的方法. 此处参考博主. 一:调用Windows API函数 CreateDirectory()和 RemoveDirectory( ...
- oracle创建、删除索引等操作
1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...
最新文章
- php学习,一个简单的Calendar(2) 一个简单的活动页面
- 【密码学】一万字带您走进密码学的世界(下)
- python中的进程
- objective-C CollectionView 加深(添加注册头部View)
- 硬核!国外开发者用 25 美元做了个区块链警佩相机!
- 自动化测试的点点滴滴经验积累
- 12月13日 新概念3一周一篇计划
- JavaScript学习指南
- 微商的十种实用推广方法
- uabntu镜像文件的后缀
- 人工智能机器人技术概述
- 支付宝扫码跳转到跳转页面
- Win10家庭版中文用户名改英文用户名方法(亲测管用)
- 如何提高代码质量,或者说高质量代码的特征是什么
- java毕业设计m和vue的酒店管理系统2021(附源码、数据库)
- java 面试概念题 笔记
- android系统 通知,Android中通知的使用-----Notification详解
- CSP-J 2020 第二轮 优秀的拆分(power)题解 —— 特别篇
- Python基础教程(一)
- 抖音2023剪映/达芬奇/AE/VEGAS等可用的LUTs预设