当前位置: 首页 > news >正文

双向链表的基本操作

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
typedef struct line
{int data;struct line *pre;//前指针struct line *next;//后指针
}line,*a;
line* init_line(line*head)
{cout<<"请输入双向链表的大小:";int size;cin>>size;if(size<1) return NULL;//申请空间与初始化head=(line*)malloc(sizeof(line));head->pre=NULL;head->next=NULL;cout<<"请输入头结点的数值大小:";int data;cin>>data;head->data=data;//赋值完头节点之后开始后续的节点的创建int pos=1;line *ls=head;while(pos<=size){line *node=(line*)malloc(sizeof(line));node->pre=NULL;node->next=NULL;cout<<"请输入第"<<pos<<"结点的数值大小:";pos++;cin>>data;node->data=data;ls->next=node;node->pre=ls;ls=ls->next;}return head;
}
line *ls_insert(line*head,int pos,int data)
{//先初始化要添加的node//指针一定要置空line *node=(line*)malloc(sizeof(line));node->data=data;node->pre=NULL;node->next=NULL;//插入链表的表头if(pos==1){node->next=head;head->pre=node;head=node;//此时head指针指向第一个位置}else{line *p=head;//指向插入位置的前一个位置for(int i=1;i<pos-1;i++){p=p->next;}//如果此时指针不为空就代表不是最后一个if(p->next){//需要有序替换四条线p->next->pre=node;node->next=p->next;p->next=node;node->pre=p;}//如果插入位置是表尾else{//相互连接就行p->next=node;node->pre=p;}}return head;
}
line *ls_delete(line *head,int data)
{//只要引用头节点指针即可line* ls=head;while(ls){//遍历判断即可if(ls->data==data){ls->pre->next=ls->next;ls->next->pre=ls->pre;free(ls);cout<<"已经成功删除!"<<endl;return head;}//没搜到就往下遍历即可ls=ls->next;}
}
void ls_display(line *head)
{line *ls=head;int pos=1;while(ls){cout<<"第"<<pos<<"个数据是:"<<ls->data<<endl;pos++;ls=ls->next;}
}
int main()
{cout<<"**************************************"<<endl;cout<<"创建双链表操作"<<endl;line *head=NULL;head=init_line(head);ls_display(head);cout<<"**************************************"<<endl;cout<<"插入双链表操作"<<endl;head=ls_insert(head,2,40);ls_display(head);cout<<"**************************************"<<endl;cout<<"删除双链表操作"<<endl;head=ls_delete(head,40);ls_display(head);cout<<"**************************************"<<endl;cout<<"所有操作结束"<<endl;cout<<"**************************************"<<endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue实现电子签名、图片合成、及预览功能
  • 订单搜索分页查询业务
  • 创建了Vue项目,需要导入什么插件以及怎么导入
  • [HITCON 2017]SSRFme 1
  • LInux:循环语句
  • Servlet (1)
  • 【2024】InfluxDB v2 介绍和安装使用(1)
  • Thread-Caching Malloc 简介
  • 第十九天内容
  • 君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链
  • Redis篇之持久化数据恢复
  • Native Programs(本机程序)
  • Python爬虫-中国汽车市场月销量数据
  • 服务器并发模型
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 【css3】浏览器内核及其兼容性
  • Android组件 - 收藏集 - 掘金
  • Angularjs之国际化
  • canvas 高仿 Apple Watch 表盘
  • JAVA_NIO系列——Channel和Buffer详解
  • node-glob通配符
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue-router 实现分析
  • Web Storage相关
  • 编写高质量JavaScript代码之并发
  • 对JS继承的一点思考
  • 基于Android乐音识别(2)
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前嗅ForeSpider教程:创建模板
  • 如何用vue打造一个移动端音乐播放器
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​低代码平台的核心价值与优势
  • ​水经微图Web1.5.0版即将上线
  • #数据结构 笔记三
  • ${factoryList }后面有空格不影响
  • (C11) 泛型表达式
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Note)C++中的继承方式
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (SpringBoot)第二章:Spring创建和使用
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (九)信息融合方式简介
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .“空心村”成因分析及解决对策122344
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net插件开发开源框架
  • .NET构架之我见
  • ::前边啥也没有
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建