双链表的创建、插入、删除与查询 C语言

数据结构——C++中实现双链表(含完整代码) 双链表相关代码。 1、创建双链表(-1结束) 2、遍历双链表 3、插入双链表元素 4、双链表删除元素 5、判断双链表是否为空 6、双链表的长度 7、查找双链表元素 0、退出程序 纯手打,亲测可以运行,使用自取。............ 阅读详情

适合初学者代码

#include<stdio.h>
#include<stdlib.h>

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

typedef struct node *LinkList;

void create(LinkList head,LinkList tail,int n)//尾插法创建
{
	LinkList p;
	int i,a;
	for(i=1;i<=n;i++)
	{
		p=(node *)malloc(sizeof(node));
		scanf("%d",&a);
		p->data=a;
		p->next=NULL;
		tail->next=p;
		p->prior=tail;
		tail=p;
	}
	printf("\n");
}

void insert(LinkList head,LinkList tail,int a,int i)//插入元素
{
	LinkList t,p;
	int j=1;
	p=head->next;
	while(j<i)
	{
		p=p->next;
		j++;
	}
	t=(node *)malloc(sizeof(node));
	t->data=a;
	t->next=p->next;
	p->next->prior=t;
	p->next=t;
	t->prior=p->next->prior;

	t=head->next;
	while(t!=NULL)
	{
		printf("%d ",t->data);
		t=t->next;
	}
	printf("\n");
}

void del(LinkList head,LinkList tail,int i)//删除元素
{
	LinkList p,q;
	p=head->next;
	int j=1;
	while(j<i)
	{
		p=p->next;
		j++;
	}
	q=p->next;
	p->next=q->next;
	q->prior=q->next->prior;
	
	p=head->next;
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next; 
	 } 
	printf("\n");
}

void check(LinkList head,LinkList tail,int a)//查询元素
{
	LinkList t;
	t=head->next;
	int flag=1;
	while(t!=NULL)
	{
		if(t->data==a)
			flag=0;
		t=t->next;
	}
	if(flag==0)
		printf("有\n");
	else
		printf("无\n");
}


int main(void)
{
	LinkList head,tail;
	tail=head=(node *)malloc(sizeof(node));
	head->prior=NULL;
	head->next=tail;
	int n,a,t,i;
	printf("创建链表输1\n插入输2\n删除输3\n查询输4\n结束输0\n");
	while(1)
	{
		
		scanf("%d",&t);
		if(t==1)
		{
			printf("输入链表长度\n"); 
			scanf("%d",&n);
			create(head,tail,n);
		} 
		
		if(t==2)
		{
			printf("输入插入的元素及位置\n");
			scanf("%d%d",&a,&i);
			insert(head,tail,a,i);
		}
		
		if(t==3)
		{
			printf("输入删除元素的位置\n");
			scanf("%d",&i);
			del(head,tail,i);
		}
		
		if(t==4)
		{
			printf("输入查询的元素\n");
			scanf("%d",&a);
			check(head,tail,a);
		}
		
		if(t==0)
			break;
	}
	return 0;
}
C++双链表各项操作(含代码) C++实现数据结构的双链表,写的不好,学习数据结构可以参考。 阅读详情

相关推荐

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1275

双链表的插入与删除

在插入操作中,我们首先将新节点的prev指针指向前一个节点,next指针指向前一个节点的后继节点。在删除操作中,我们首先判断待删除节点的前一个节点和后一个节点是否存在,然后更新它们的指针,将待删除节点从链表中移除。双链表(Doubly Linked List)是一种链表数据结构,它与单链表相比,在每个节点上都有两个指针,一个指向前一个节点,一个指向后一个节点。在双链表中插入一个节点,需要先找到插入位置的前一个节点,然后通过更新指针的方式将新节点插入到前一个节点和后一个节点之间。

qq_65761686的博客 1976

EtherCAT同步模式实战:如何用TwinCAT配置DC-Synchronous模式(附时序图详解)

本文详细解析了如何在TwinCAT环境中配置EtherCAT的DC-Synchronous同步模式,实现纳秒级同步精度。通过硬件准备、参数配置和高级调优步骤,帮助工程师解决工业自动化中的同步挑战,提升运动控制性能。

gold的博客 1571

数据结构双向链表,实现增删改查

双向链表的描述以及存储结构定义,头插、尾插、头删、尾删以及双向链表逆置等基本操作的实现

小钱努力学C的博客 1349

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 838

从配置字到实际运动:手把手教你用EtherCAT调试伺服电机的控制模式(以倍福TwinCAT3为例)

本文详细介绍了如何使用EtherCAT调试伺服电机的控制模式,以倍福TwinCAT3为例。从环境搭建、模式配置到状态机切换,提供了完整的操作指南和典型故障排查方法,帮助工程师快速解决‘配置字写入了但电机不转’等常见问题,提升工业自动化现场的调试效率。

weixin_42783709的博客 421

数据结构-双向链表(c++)超全超详细

文章目录前言一、双向链表是什么?二、双向链表上的基本操作1.定义双向链表2.初始化双链表3.前插法创建双链表4.尾插法创建双链表5.双向链表的遍历输出6.双链表的指定位置插入7.双链表的按位取值8.双链表的任意位置删除9.双链表的销毁三、全部代码(主函数部分比较凌乱)总结 前言 单链表结点中只有一个指向其后继的指针,使得单链表只能从头结点依次顺序地向后遍历。要访问某个结点的前驱结点(插入,删除操作时),只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度为O(n)。 提示:以.

Abieai的博客 2万+

pdf.js 移动端手势缩放功能实现与原生事件集成

本文详细解析了如何为pdf.js的viewer.html移动端页面实现流畅的双指捏合手势缩放功能。通过深入分析pdf.js的缩放机制,并利用原生触摸事件(touchstart、touchmove、touchend)进行集成,在不修改核心源码的前提下,为用户提供媲美原生应用的顺滑缩放体验,有效提升了移动端PDF阅读的专业性和用户满意度。

brandy的博客 488

C语言实现的,包含循环双链表的基本操作:创建、显示、后插插入、删除、查询和遍历功能。

用VS2O22 c语言实现的一个简单的循环双链表,提供了用户交互菜单、插入、删除、遍历、查询等功能

2401_84643729的博客 882

高级图像增强——模拟雨天,雾,雪,阳光,阴影,运动模糊,畸变等14种效果,同步扩充标签文件

本文提供了一些高级的,特殊的图像增强方法,具体包括、光。

Limiiiing的博客 1308

AI应用架构师实战:半导体器件仿真AI智能体系统搭建

半导体器件仿真(如MOSFET、FinFET等)是芯片设计的核心环节,传统流程依赖专家手动调参、多物理场仿真引擎(如TCAD)耗时(小时级至天级)、经验难以沉淀,导致研发周期长、成本高。如何构建一个AI智能体系统,实现仿真任务的自动化调度、参数智能优化、结果分析与知识沉淀,成为提升半导体研发效率的关键挑战。

移动开发前沿的博客 1222

c语言双链表的插入和删除,双链表的创建、插入、删除与查询 C语言

next;j++;}t=(node *)malloc(sizeof(node));t->data=a;t->next=p->next;p->next->prior=t;p->next=t;t->prior=p->next->prior;t=head->next;while(t!=NULL){printf("%d ",t->data)...

weixin_35348182的博客 356

C#上位机+TensorFlow Lite 轻量化AI模型部署实战(工业级完整版,低算力工控机首选)

工业自动化轻量化AI部署指南:C# + TensorFlow Lite实战 摘要:本文针对工业自动化领域机器视觉部署的痛点,提出基于C#和TensorFlow Lite(TFLite)的轻量化解决方案。该方案完美适配低算力工控环境(J1900/2G内存),具有以下核心优势:1)极致轻量化,模型体积仅KB-MB级;2)CPU深度优化,单帧推理≤15ms;3)零环境依赖,纯C#部署;4)工业级稳定性,7×24小时运行。教程涵盖从环境搭建、模型转换到C#封装的完整流程,特别提供YOLOv8等工业常用模型的TFLi

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1030

链表_学习笔记(C语言)

创建链表头插法:因为是往链表的前端插入新节点,所TT节点的next要指向head节点的next, 随后将head节点的next指向TT节点,便可。尾插法是在尾部增节点,head节点固定为链表的头部,r的节点的next指向s节点,创建链表尾插法:head节点为头结点。r节点为游标节点(可以认为是中间节点),

musanruqiu的博客 552

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C练习_双向链表操作

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct snode{     int val;     struct snode *pre;     struct snode *next; }node, *pnode;      //定义双链表节点,其中多数情况使用指针pnode创建新节点 pnode creatD...

lhs82612的博客 236

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

来自贺老师

#ifndef DLINKLIST_H_INCLUDED #define DLINKLIST_H_INCLUDED typedef int ElemType; typedef struct DNode //定义双链表结点类型 { ElemType data; struct DNode *prior; //指向前驱结点 struct DNode *next

wangzhaoweng的博客 308

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【数据结构】C语言实现双链表的增删查改

双链表(DoublyLinkedList)是一种常见的数据结构,它与单链表类似,但每个节点除了前驱指针指向前一个节点外,还有一个后继指针指向后面一个节点,即每个节点拥有两个指针域。与单链表相比,双链表可以在O(1)的时间内实现在任意位置的插入和删除操作,而不需要像单链表一样需要先遍历找到前一个节点。

weixin_66831846的博客 654

第四周项目4—建设双链表算法库

双链表算法库算法库采用程序的多文件组织形式,包括两个文件:   1.头文件:dlinklist.h,包含定义双链表数据结构的代码、宏定义、要实现算法的函数的声明; #ifndef DLINKLIST_H_INCLUDED #define DLINKLIST_H_INCLUDED typedef int ElemType; typedef struct DNode

Niki2222的博客 578

C语言数据结构篇——双链表的创建,插入,节点删除,打印等操作

一般学习双链表都是在学习单链表之后,但单链表有一个缺点,就是无法访问前驱节点,需要查找某个已知节点的前一个节点时能再次从头遍历,就比较麻烦,那么,在节点中再加一个指针指向前驱节点的链表就称为双链表,再综合单链表的节点写法,那么双链表的写法就很简单了。数据节点包含一个数据域,两个指针(一个指向前驱节点,一个指向后驱节点)。大致图解如下: ...

Demo不是emo的博客 1万+

数据结构——双链表(C语言详述通用双链表)

  该文是根据李先静先生的书籍《系统程序员成长计划》中的双链表的1.4拥抱变化的示例程序进行分析,作为小白,相对来说写的比较详细,故篇幅较长。   依据李先生的双链表的示例,希望能够学习到一二。主要是想加深一下印象。也希望对其他人有所帮助,难免会存在一些错误的理解和笔误,希望看文章的朋友能够指出。   为便于阅读,函数的出场次序与源程序有所出路。   程序源码整体可从:系统程序员成长计划 ——学习篇3:双链表处获取。 概念   了解双链表之前应先对单链表有所了解,单链表虽能100%解决逻辑关系为“一对一”数

weixin_42645653的博客 3835

双链表的创建、遍历、测长、插入、删除、销毁

今天把双链表复习了一遍,双链表主要是插入和删除的 操作,两个操作的示意图如下                                                               链表的插入

拥抱新技术,终身学习 1151

《数据结构C语言版》-双链表的增删查改,链表与顺序表的区别

《数据结构C语言版》-双链表的增删查改,链表与顺序表的区别,简单易懂,轻松掌握。

. 1415

数据结构之双链表(c语言附完整代码)

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。声明双链表typedef struct DNode //定义双链表结点类型 {//数据域 struct DNode * prior;//指向前驱结点 struct DNode * next;//指向后继结点 } DLinkNode;注意:本文章讨论的双链表是带头结点的双链表。

m0_62795460的博客 2709

双链表的创建、插入和删除

双连边的创建、插入和删除操作

qq_45595840的博客 1192

双链表各种基础运算

 函数:1. Initlist(dlinklist *&l):初始化双链表l.2. Destroylist(dlinklist *l):释放双链表l.3. Listempty(dlinklist *l):判断双链表l是否为空表。4. Listlength(dlinklist *l):返回双链表l的元素个数。5. Displist(dlinklist *l):输出双链表l.

ヤ冰楓ˊ﹋ろ 1312

双链表

双链表定义和基本运算 #include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct DNode //定义双链表结点类型 { ElemType data; struct DNode *prior; //指向前驱结点 struct DNode *next; //指向后继结点 ...

Lau's Blog 597
下一篇: 单链表的创建、插入删除和查询
鳳九~
博客等级 码龄8年 1384粉丝 215原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值