C/C++实现双向链表及基本操作

华为无线WiFi实战:基于802.1x与NPS的企业级认证部署指南 本文提供了一份详尽的华为无线WiFi企业级认证部署实战指南。通过整合802.1x协议与Windows NPS服务器,构建基于AD域账号的安全认证体系,彻底解决传统WiFi密码共享带来的安全风险。文章详细拆解了从NPS服务器配置、证书部署到华为AC端RADIUS模板、AAA方案、认证域及VAP模板调用的全流程,并附有终端连接测试与常见故障排查方法,助力企业实现高效、安全的无线网络接入管理。 阅读详情

接下来,我要用一段C/C++代码实现双向链表的构建,插入,删除操作。这是链表操作中比较基本的操作,我是模仿单向链表来进行双向链表的构建,其插入和删除操作也和单向链表大同小异,代码并不晦涩难懂,适合新手研读,有错误或者不够完善的希望大家指出。

#include "pch.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;

/* 构建双向链表(3指针法 模仿单链表创建 */
typedef struct NODE
{
	int data;           //结点数据
	NODE *pNext;        //指向直接前驱
	NODE *Prior;        //指向直接后继
	int pos;            //结点位置
}Node;

Node* create_List()
{
	//三指针法创建双向链表,类似单链表的创建
	Node *head, *p1, *p2;
	head = p1 = p2 = new Node;
    head->Prior = NULL;   //头结点的前指针置空
	cin >> head->data;
	head->pos = 1;        //结点位置  
    for (int i = 2; i <= 6; i++) //这里创建一个5结点双向链表
	{
		p1 = new Node;
		cout << "...Please input the data: ";
		cin >> p1->data;
		p1->pos = i;     //结点位置
		p1->Prior = p2;
		p2->pNext = p1;
		p2 = p1;
	}
	    p1->pNext = NULL;
	    return head;
    }

void showLIST(Node* head)   //双向链表的遍历
{
	Node *p = head;
	while (p)
	{
		if (p->pNext == NULL)
		{
			cout << p->data;
		}
        else
		{
			cout << p->data;
			Sleep(800);
			cout << " <-> ";
		}
		    p = p->pNext;
	} 
	cout << endl;
}

//随机插入
Node* insert(Node* head)
{
	Node* p = head;
	Node *temp;
	Node *insert_Node = new Node;
	int i;
    cout << "...你想插在哪一个结点上: ";
	cin >> i;
	cout << "...好的,你想插入的结点数据是: ";
	cin >> insert_Node->data;
    if (i == 1)        //插入在第一个结点
	{
		insert_Node->Prior = NULL;
		insert_Node->pNext = head;
		head->Prior = insert_Node;

		head = insert_Node;
	}
	else               //插入在其他结点
	{
		while (p)
		{
			temp = p;  //暂时保存当前结点
			p = p->pNext;
            if (p->pos == i && p!=NULL)   //对应某一位置的结点
			{
				insert_Node->pNext = p;
				insert_Node->Prior = temp;
				temp->pNext = insert_Node;
            }
                p->Prior = insert_Node;
				break;    //一旦找到插入位置 记得跳出循环 不要浪费时间和内存
			}			
		}
	}
	return head;
}

//随机删除
Node* delet(Node* head)
{
	Node *p = head;
	Node *temp;
	short data;
	cout << "...你想删除的结点数据是: ";
	cin >> data;
    if (head->data == data)      //如果是第一个结点
	{
		temp = head->pNext;
		head->pNext->Prior = NULL;
		delete head;
		head = NULL;
		head = temp;
	}
    else    //如果不是第一个结点
	{
		while (p)
		{
			temp = p;    //暂时保存当前结点
			p = p->pNext;
			
            if (p->pNext == NULL && p->data ==data)  //如果是最后一个结点
			{
				temp->pNext = NULL;
				delete p;
				p = NULL;
			}
			else       //如果不是最后一个结点
			{
				if (p->data == data)
				{
					temp->pNext = p->pNext;
					p->pNext->Prior = temp;
					delete p;
					p = NULL;
				}
			}
		}
	}
	return head;
}
     
    int main(){
	cout << "...Please input the data: ";
	Node *p = create_List();
	showLIST(p);
	cout << endl << endl;   
	
	/*插入*/	
	Node *p1 = insert(p);
	cout << endl << "...插入后进行遍历 " << endl;
	Sleep(1000);
	showLIST(p1);

    /* 删除 */
	Node *p2 = delet(p);
	cout << endl << "...删除后进行遍历 " << endl;
	showLIST(p2);
	cout << endl << endl;
	
    delete p1, p2;
	system("pause");
	return 0;
}

实现效果如下

model_optimizer将pi05端到端延时进一步优化到68.13ms了 目前在保持灵活性和性能之间找到一个较好的平衡。vit, llm仍然使用onnx->trt_engine的路径,量化可以通过https://github.com/NVIDIA/Model-Optimizer.git支持。同时支持通过cutedsl手写算子进行进一步优化denoise因为步数多,kernel launch多,因此完全通过手写融合算子实现,将所有steps进行一次大的cuda graph capture. 阅读详情

相关推荐

【上海大学计算机组成原理实验报告】六、内存系统实验

学习内存访问机制//理解代码和数据的分区存放原理和技术//手动方式把立即数`33H`写入内存`D1H`单元//手动方式把`D1H`单元的内容读出,再送入`ST`单元//在`CP226`汇编语言程序集成开发环境下编写程序//既然有`ORG`微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?//上海大学计算机组成原理实验//内存系统实验

HackerKevon的博客 3128

利用C++实现双向链表的基本操作

本文采用利用C++实现了对双向链表的基本操作。操作包括:双向链表的构建、链表指定位置的插入、链表指定位置的删除、链表长度的获取、链表指定位置元素的获得及指定元素位置的获得、整体链表的删除。

weixin_43165699的博客 4336

STM32F103+AX58100 EtherCAT从站SPI移植实战:CubeMX配置避坑指南

本文详细介绍了STM32F103与AX58100 EtherCAT从站控制器的SPI接口移植实战,重点解析CubeMX配置中的关键参数与常见陷阱。内容涵盖硬件连接规范、SPI模式设置、中断优先级规划及协议栈对接技巧,帮助开发者高效实现工业自动化领域的实时通信方案。特别强调CPOL/CPHA配置与AX58100的匹配要求,避免数据错位问题。

weixin_29230865的博客 330

C++实现双向链表

实现双向链表的基本操作:创建列表功能,插入功能,删除功能,顺序输出,逆序输出,判断回文串功能 #include <iostream> #include<cstring> using namespace std; class ListNode { public: char data; ListNode* prev; ListNode* next; ListNode() { data = '0'; prev = nullptr; next = nullptr;

fzy2003的博客 4710

Cadence 设计实践笔记-小哥allegro 2层板笔记

规范建立文件夹本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。规范建立文件夹建立八个文件夹我使用的Cadence 17.4 有些差异原理图绘制原图绘制首先要熟悉原理图工作原理工作原理下面是这个项目的原理图重点关注电源新建原理图库打开Cadence 软件创建项目新建工程 File ==========》Project我这里选择了Enable PSPice 试试能不能仿真,新建项目如下。

我的专栏 1479

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新

2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。

weixin_45821055的博客 1770

(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作

链表(三)

菜鸟学C/C++ 1万+

openEuler 快速入门

openEuler 是一个专注于企业领域的 Linux 发行版,广泛应用于服务器、云计算和边缘计算场景。最初由华为开发,现在由 Open Atom Foundation 进行开发和管理。Open Atom Foundation 是中国第一个开源软件基金会,得到了华为、阿里巴巴、腾讯、百度等知名企业的支持,并且中国信息通信部也是该基金会的一部分。可以将 openEuler 看作是 Red Hat 或 SUSE Linux 的等价物,但它与 SUSE Linux 更为相似。

HuaweiLab_Peach的博客 2052

C++语言实现双向链表

这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大家分析了双向链表的结构,并以图示的方式给大家解释了双向链表的基本操作。本篇文章利用C++实现了双向链表的基本操作,其中包括: 双向链表的基本操作C++语言实现 头部插入结点建立链表 尾部插入结点建立链表 实现指定位置插入结点 查找给定数值是否存在 删除指定位置的结点 修改指定位置的...

BeiXi's Blog 1215

【报错解决】彻底解决 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 报错

CondaHTTPError: HTTP 000 CONNECTION FAILED for url 错误本质上是由于 Conda 无法访问远程仓库引起的,常见原因包括网络不通、防火墙或安全软件阻拦、SSL 证书异常以及默认仓库不可达。解决该问题的关键在于:确保网络畅通、配置国内稳定镜像源、调整防火墙和安全设置、处理 SSL 证书问题,并保持 Conda 版本更新。通过这些方法,几乎可以彻底消除连接失败问题,保证 Conda 环境的正常使用和包管理的稳定性。

博客 1162

数字人(对嘴型 Lip-sync)数据集 LRS2 介绍(含网盘链接)

LRS2(Lip Reading Sentences 2)是牛津大学与BBC合作开发的一个大规模唇语识别数据集,专门用于训练和评估数字人唇语同步(Lip-sync)技术。该数据集包含数千条来自BBC电视节目的口语句子,每个句子长度最多100个字符。官方网站为:https://www.robots.ox.ac.uk/~vgg/data/lip_reading/lrs2.html可惜需要认证,不过我已经下载好并存到网盘里了,有需要可适用如下链接下载。(仅供学习,请勿传播)

iioSnail的博客 1680

C++完成双向链表的创建及其它基本操作

​ /*双链表结构体为: typedef struct { int num; /学号 char name[10]; /姓名 } student; 分别建立包含3~5个数据元素的链式存储线性表; (3)实现功能 a) 构造空表,直接从键盘输入数据元素 b) 插入、删除、一般查找(给定某一学号x,找到并显示该学生信息)、显示,等函数功能 */ #include<iostr.

qq_63035929的博客 4828

【DRAM存储器六十八】DDR5介绍--DQS Interval Oscillator—动态时序校准利器

DDR5内存采用DQS间隔振荡器(DQSIntervalOscillator)技术应对高速数据传输中的时序漂移问题。该技术通过测量DQS信号在可编程时间窗口内的振荡次数(16位计数值),动态监测温度/电压变化导致的DQS-DQ延迟偏移。控制器通过MPC命令启停振荡器,读取MR46/MR47寄存器获取计数值,并与基准值对比来调整DQS相位,确保数据采样窗口始终处于最佳位置。该机制使DDR5在8400MT/s高速率下仍能保持数据可靠性,有效补偿±0.48tCK的时序偏移。

highman110的博客 149

双向链表基本操作实现 数据结构 C/C++

双向链表基本操作实现1.初始定义2.初始化循环链表3.输入指定长度数据4.插入元素操作5.删除元素操作6.遍历打印元素 1.初始定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct DualNode{ ElemType data;

Aslixzhou 223

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

循环双向链表基本操作实现(双向链表改进) 数据结构 C/C++

循环双向链表基本操作1.初始定义2.初始化双向循环链表3.输入指定长度数据4.插入元素操作5.删除元素操作7.遍历打印元素(正序)8.遍历打印元素(逆序)9.双向链表操作实现 1.初始定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct

Aslixzhou 196

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数据结构与算法:链表的C/C++实现

数据结构是计算机科学中的一个核心概念,它定义了数据的组织、管理和存储方式,以便可以高效地访问和修改数据。链表是一种基础的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。链表可以是单向的,也可以是双向的,甚至可以是循环的。

2401_86771711的博客 2849

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c/c++实现双向链表

实现基于C/C++的数据结构的双向链表,此程序未经过严格实验,只是提供大概思路 #include #include typedef int DataType; typedef struct node  { DataType data; struct node *prior,*next; }DNode,*DLinkList; DLinkList create_D

min954584739的博客 513

C/C++之双向链表&双向循环链表

【代码】C/C++之双向链表&双向循环链表。

CRYSTAL_FC的博客 349

Data Structure:C/C++实现循环双向链表

Data Structure:C/C++实现循环双向链表 单向链表示意图 双向链表示意图 双向链表实现循环,则是将其头尾连接起来。即头结点的前指针指向尾结点,尾结点的后指针指向头结点。 C/C++代码实现如下: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; // 链表结构体 struct node { float ...

baidu_22429139的博客 315

C/C++实现双向链表:带头结点

基本功能 1.初始化双向链表:带头结点 2.创建双链表:头插法 3.创建双向链表:尾插法 4.正向遍历链表 5.逆向遍历链表 6.按位序查找元素 7.按值查找元素 8.按位序插入 9.按位序删除   代码 #include <iostream> #include <stdlib.h> using namespace std; typedef int ElemType; typedef struct DNode{ ElemType data; struct DN

weixin_44915226的博客 606

linux下c语言 双向链表

C/C++ code /*sgx 2008-10-30 c语言 双向链表*/#include &lt;stdio.h&gt;#include &lt;assert.h&gt;#include &lt;malloc.h&gt;#define TRUE 1;#define FALSE 0;typedef int ELEMTYPE;typedef struct DoubleLinkNode{ E...

weixin_34258078的博客 157

c/c++ 线性表之双向链表

c/c++ 线性表之双向链表 线性表之双向链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点是NULL。 真实的第一个节点是头节点,头节点不存放数据,单纯为了编写程序方便。但是下面注释里写的【第一个节点】的含义是头节点的下一节点,也就是真实存放数据的第一个节点。 下面的代码实现了以下功能 函数 功能描述...

weixin_30708329的博客 141

第三篇、C_双向链表(循环链表)

简介:   在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高。因此常常需要考虑系统的实用性,常常采用双向链表来开发。 示例: 1.数据 typedef struct node{   int data; // 数据   struct node *last; // 前一个数据节点   ...

weixin_34198797的博客 133

双向链表

http://www.cprogramming.com/snippets/source-code/double-linked-list-cplusplus This snippet submitted by Ali Murad on 2012-03-10. It has been viewed 3838 times. Rating of 9 with 20 votes

Rauber_Hotzenplotz的专栏 1001

双向链表 建立

None

zhongjie的专栏 516

双链表程序

#include #include #include #define NULL 0 typedef struct node {     int data;     struct node*prio;     struct node*next; }ElemSN; //创建双向链表 ElemSN*Creatlink(int a[],int n) {     Ele

qq_34677580的博客 273
上一篇: C/C++实现栈的一些基本操作
下一篇: c/c++实现二叉树的一些基本操作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值