IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 双链表的插入、删除、查找等操作 -> 正文阅读

[C++知识库]双链表的插入、删除、查找等操作

#include<iostream>
#include<cstring>
#include <set>
#include <map>
#include <ctime>
#include <bitset>
#include <sstream>
#include <algorithm>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>//getch()的头文件
#include<vector>
#include<queue>
#include<stack>
using namespace std;
// 带头结点的双链表的创建、遍历、删除
typedef struct DNode{
	int data; // 数据域
	struct DNode *prior,*next;// 前驱和后继指针 
}DNode,*DLinkList; 
void isEmpty(DLinkList &L){// 判断双链表是否为空 
	if(L->next==NULL){
		cout<<"当前双链表为空"<<endl;
	}else{
		cout<<"当前双链表非空"<<endl; 
	}
}
bool InsertNextDNode(DNode *p,DNode *s){// 插入后续结点的函数,其中p为任意结点,s为插入结点 
	if(p==NULL||s==NULL){
		return false;
	}
	s->next=p->next;
	if(p->next!=NULL){// 如果p 是最后一个结点 
		p->next->prior=s;
	}
		s->prior=p;
		p->next=s;
	return true;
}
bool DeleteNextNode(DNode *p){// 删除结点p的后继结点的函数,其中p为任意结点 
	if(p==NULL) return false;// 如果这个待删除结点为NULL 返回false 
	DNode *q=p->next;// 判断是否为最后一个结点 
	if(q==NULL) return false;
	p->next=q->next;
	if(q->next!=NULL)
		q->next->prior=p;
	free(q);
	return true; 
}
void ReadDLinkList(DLinkList &L){// 传递的是地址的引用,这里的L为双链表的头接点 
	DNode * M= (DNode*) malloc(sizeof(DNode));// 初始化一个结点指针,并且该结点指针指向头结点L  
	M=L;
	while(M->next!=NULL){
		M=M->next;// 头结点不携带任何数据,因此一开始需要后移 
		cout<<M->data<<"\t";
	}
	cout<<endl;
} 

DLinkList InitDLinkList(DLinkList &L){// 初始化双链表 
	L = (DNode *) malloc(sizeof(DNode));
	if(L==NULL){
		return false;
	}
	L->prior=NULL;// 头结点的前驱永远为NULL 
	L->next=NULL;// 头结点的后继为NULL表示暂时还没有后继元素 
	cout<<"依次输入整形的数据作为双链表的结点数据,并且以-1作为输入结束。"<<endl;
	int data;
	cin>>data;
	DNode * M =(DNode *) malloc(sizeof(DNode));// 这个结点作为L头结点的移动结点
	M=L;// M指向头结点L 
	while(-1!=data){
		DNode *temp = (DNode *) malloc(sizeof(DNode));// 初始化一个结点作为下一个插入结点
		temp->data=data;
		InsertNextDNode(M,temp);// 将这个结点插在M 结点后面
		M=M->next;// 结点M后移 
		cin>>data;
	}
	return L;
}


int GetLinkListLength(DLinkList &L){// 获取链表的长度
if(L->next==NULL)
	return 0;
int length=0;
// 为了不移动头结点,因此需要一个辅助结点来进行移动
DLinkList M=(DNode *) malloc (sizeof(DNode));
M = L;
while(M->next!=NULL){
	M = M->next;
	length++;
} 
return length;
}

void  SearchByPosition(DLinkList &L,int x){// 实现按位查找 
	int length = GetLinkListLength(L);
	if(length==0){
		cout<<"当前双链表的长度为0"<<endl;
		return ;
	}else{
// 为了不移动头结点,因此需要一个辅助结点来进行移动
DLinkList M=(DNode *) malloc (sizeof(DNode));
M = L;
int i =0;
while(x>length){// 如果 
	cout<<"\n查找位置超出链表长度,情重新输入。"<<endl;
cin>>x;
if(x<0){
	cout<<"\n输入非法,输入的值不能小于0,请重新输入。"<<endl;
	cin>>x;
} 
}
while(i<x){
M=M->next;
i++;
}
cout<<M->data;
}
return ;
}
void VerifyValue(DLinkList &L,int value){// 验证值是否在双链表中 
// 为了不移动头结点,因此需要一个辅助结点来进行移动
DLinkList M=(DNode *) malloc (sizeof(DNode));
M = L;
M=M->next;// 因为头结点一开始不携带数据 
while(M->data!=value&&M->next!=NULL){// 如果当前结点的值不为要查找的值,并且存在下一个结点 
M=M->next; 
if(M->data==value){
	cout<<"该值在链表中"<<endl; 
	return ;
}
}
cout<<"该值不在链表中"<<endl;
}



int main()
{	
	DNode *L;// 声明头结点指针L 
	L = InitDLinkList(L);// 初始化这个头结点
	ReadDLinkList(L);
	isEmpty(L);
	cout<<"\n按位查找,请输入要查找的第n个结点的值"<<endl;
	int i;
	cin>>i;
	SearchByPosition(L,i);
	cout<<"\n按值查找,请输入要验证的值"<<endl;
	int j;
	cin>>j;
	VerifyValue(L,j);
	cout<<"\n对双链表进行删除操作…"<<endl;
	while(L->next!=NULL){// 此操作删除了除头结点外的所有后继节点 
		DeleteNextNode(L);
	}
	isEmpty(L);
	free(L);	
	
return 0;
}



在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:05:39  更:2022-04-09 18:08:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:00:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码