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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 带有头节点的双链表 -> 正文阅读

[数据结构与算法]带有头节点的双链表

#include<bits/stdc++.h>
using namespace std;
//带有头节点的双链表

struct LNode{
	int data;
	LNode *next;
	LNode *prior;	
}; 

//初始化链表
void InitList(LNode * &L){
	
	L=(LNode *)malloc(sizeof(LNode));
	L->next=NULL;
	L->prior=NULL;
	
}

//判断链表是否为空
bool isEmpty(LNode *L){
	if(L->next==NULL)
		return true;
	else 
		return false;
} 

//插入节点
void ListInsert(LNode * &L,int i,int value){
	
	if(i<1){
		cout<<"插入位置不合法"<<endl;
		return;
	}
	
	LNode *p=L;
	LNode *t=(LNode *)malloc(sizeof(LNode));
	int j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL){
		cout<<"插入位置不合法"<<endl;
		return;
	}
	
	t->data=value;
	t->next=p->next;
	if(p->next!=NULL) //避免要插入的位置后面没有节点为空而产生错误 
		p->next->prior=t;
	p->next=t;
	t->prior=p;
	printf("%d插入成功\n",value);
}


//删除节点
void ListDelete(LNode * &L,int i){
	
	if(i<1){
		cout<<"删除位置不合法"<<endl;
		return;
	}
	
	LNode *p=L;
	int j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	
	if(p==NULL||p->next==NULL){
		cout<<"删除位置不合法"<<endl;
		return;
	}
	
	if(p->next->next!=NULL) //避免要删除的节点后面没有节点为空而产生错误 
		p->next->next->prior=p;
	p->next=p->next->next;
	printf("第%d个节点删除成功\n",i); 
}


//修改节点
void ListUpdate(LNode * &L,int i,int value){

    if(i<1){
        cout<<"修改位置不合法"<<endl;
        return ;
    }

    LNode *p=L;
    int j=0;
    while(p!=NULL&&j<i){
        p=p->next;
        j++;
    }

    if(p==NULL){
        cout<<"修改位置不合法"<<endl;
        return ;
    }

    p->data=value;
    printf("第%d个节点的数据修改为:%d\n",i,value); 
}


//查找节点
void GetElem(LNode *L,int i){

    if(i<1){
        cout<<"查找位置不合法"<<endl;
        return;
    }

    LNode *p=L;
    int j=0;
    while(p!=NULL&&j<i){
        p=p->next;
        j++;
    }

    if(p==NULL){
        cout<<"查找位置不合法"<<endl;
        return;
    }

    int value=p->data;
    printf("查找成功,第%d个节点元素为:%d\n",i,value);
}


//遍历链表 
void ListShow(LNode * &L){

    LNode *T=L->next;
    while(T!=NULL){
        cout<<T->data<<" ";
        T=T->next;
    }
    cout<<endl;
}

int main(){
	
	LNode *L; //定义一个节点指针 
	
	InitList(L); //初始化链表 
	
	isEmpty(L)?cout<<"空"<<endl:cout<<"非空"<<endl; //判断链表是否为空 
	
	ListInsert(L,1,5); //插入节点 
	ListInsert(L,2,6);
	ListInsert(L,3,3);
	ListInsert(L,1,8);
	ListInsert(L,2,2);
	ListInsert(L,3,9);
	
	ListShow(L); //遍历链表 
	
	ListDelete(L,1); //删除节点
    ListDelete(L,9);
    ListDelete(L,4);

    ListShow(L); //遍历节点

    GetElem(L,1); //查找节点
    GetElem(L,2);
    GetElem(L,9);

    ListUpdate(L,1,6); //修改节点
    ListUpdate(L,3,9);
    ListUpdate(L,8,6);

    ListShow(L); //遍历节点
	
	isEmpty(L)?cout<<"空"<<endl:cout<<"非空"<<endl; //判断链表是否为空 
	
	return 0;
} 

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:32:05  更:2021-08-13 12:33:34 
 
开发: 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/25 20:54:49-

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