简单的双向链表题目(可是T哭了!!)(这个题目给自己提个醒吧)

链表详解(单链表、双向链表、链表逆序) 单链表 想了解单链表的一些概念可以看我另一篇博客: 链表基础 单链表结构体定义 //单链表的结构定义 typedef struct LNode { int data; //data存放结点数据域 struct LNode *next; //指向后继结点的指针 }LNode; 单链表的建立 (1)定义单链表的数据结构; (2)读取数据; (3)生成新结点; (4)将数据存入结点的成员变量中; (5)将新结点连接到表头或表尾。 重复(2)~(5)直到输入结束。 //头插法建立单链表 void c 阅读详情

答案:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{
    char data;
    struct node *last;
    struct node *next;
};
char str[1000005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int i;
        struct node *head,*p,*tail,*q;
        head = (struct node *)malloc(sizeof(struct node));
        head->last = NULL;
        head->next = NULL;
        scanf("%s",str);
        tail = head;
        for(i=0; str[i]; i++)
        {
            if(str[i]=='<')
            {
                if(tail->last)
                    tail = tail->last;
            }
            else if(str[i]=='>')
            {
                if(tail->next)
                    tail = tail->next;
            }
            else if(str[i]=='-')
            {
                if(tail->last)
                {
                    q = tail;
                    tail = tail->last;
                    tail->next = q->next;
                    if(tail->next)
                        q->next->last = tail;///当时少了这句话,很难受,其实链表有个特点:(很简单)但是(错一点都不行+错任何地方都很难找BUG!)
                    q->last = NULL;
                    q->next = NULL;
                    free(q);
                }
            }
            else
            {
                p = (struct node *)malloc(sizeof(struct node));
                p->data = str[i];
                p->next = tail->next;
                if(tail->next!=NULL)
                {
                    tail->next->last = p;
                }
                tail->next = p;
                p->last = tail;
                tail = p;
            }
        }
        p = head->next;
        while(p)
        {
            printf("%c",p->data);
            p = p->next;
        }
        printf("\n");
    }
    return 0;
}
 

双向链表的C++实现 双向链表的C++实现           双向链表与单向链表相比,各个结点多了一个指向前一个结点的指针。结构如图所示:           双向链表的结点定义如下: #ifndef SIMPLENODE_HPP #define SIMPLENODE_HPP template //再定义一个模板 写双链表 class DoubleNode { public: 阅读详情

相关推荐

Nginx 队列双向链表结构 ngx_queue_t

在 Nginx 的队列实现中,实质就是具有头节点的双向循环链表,这里的双向链表中的节点是没有数据区的,只有两个指向节点的指针。需注意的是队列链表的内存分配不是直接从内存池分配的,即没有进行内存池管理,而是需要我们自己管理内存,所有我们可以指定它在内存池管理或者直接在堆里面进行管理,最好使用内存池进行管理。

关注校招求职,微信号:job_campus 2448

【数据结构】双向链表的实现

又是一篇万字文章,建议收藏。

adcxhw的博客 1662

NVIDIA 2025 Board Design Engineer 校招笔试全解析:从基础门电路到理想放大器设计

本文详细解析了NVIDIA 2025届板级设计工程师校招笔试的核心考点与解题策略。内容涵盖从基础门电路、CMOS实现NOR门,到开关电源CCM/DCM模式波形分析与效率计算,以及理想运放电路设计与稳定性优化。旨在帮助考生构建硬件知识体系,掌握工程思维,顺利通过NVIDIA Board Design Engineer校招笔试。

weixin_29172201的博客 196

链表经典题目(上)以及双向链表的增删改查

用c语言写链表经典题目,带头双向链表和带头双向循环链表

txh1873749380的博客 459

Tessy学习系列(三):单元测试——官方例程isValueInRange

注意:工程名称以及路劲不能包含空格和中文

不吃鱼的猫的博客 2348

5GCPE与4G物联网卡兼容实战:通过AT指令修改IMEI实现设备迁移

本文详细介绍了如何通过AT指令修改5GCPE设备的IMEI,实现4G物联网卡的设备迁移。从硬件准备、驱动安装到串口工具配置,再到具体的AT指令操作步骤,提供了全面的实战指南。文章还包含信号优化、APN设置等实用技巧,帮助用户顺利完成设备迁移并提升网络性能。

weixin_28684757的博客 635

链表选择题练习

1、已知 pPre 为指向链表中某结点的指针, pNew 是指向新结点的指针,以下哪段伪码算法是将一个新结点插入到链表中 pPre 所指向结点的后面?(C ) A pPre->link = pNew; pNew = null; B pPre->link = pNew->link; pNew->link = null; C pNew->link = p...

master_1997的博客 2031

【DNN实现二分类模型推理部署(C#)----20240712】

【DNN实现二分类模型推理部署(C#)----20240712】

weixin_44119674的博客 212

【基础算法训练】—— 双向链表

双向链表总结

weixin_52621323的博客 921

Windows 10 本地硬盘变成了可弹出磁盘

今天新装了系统, 电脑是一个SSD+HHD, 没想到装好之后右下角显示可安全删除设备, 两个硬盘在那里. 这还得了. 查了一下午, 大致知道了是什么问题. Standard SATA AHCI controller使用高性能的硬盘模式就会把硬盘看作是一个可热插拔的存储器, 所以自然就会显示可弹出. 如果你的BIOS支持关闭HotSwap或者HotPlug, 那么直接关闭就可以了. 或者你直接在BIOS里把磁盘模式改为IDE, 不过这样就发挥不好你SSD的高性能了. 还有一种解决方法, 就是手动让系统把这两个

落日之城 4万+

【AI智能体】全场景AI智能体工作台WorkBuddy实战操作详解

全场景AI智能体工作台WorkBuddy实战操作详解

congge 5495

链表笔试题

链表: 1、注意是否有带头结点。 2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。 3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历。 双向循环链表的插入和删除: 1.p之后插入s s->next = p->next; p->next = s; s->prior = p;

luxiaoxun的专栏 6488

ShengBTE热导计算:利用ShengBTE计算热导显示NAN的原因是什么?算出的热导不随平均声子自由程变化

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 964

C++实现双向链表

下面就是我们双向链表的基本原理。这里我们插入代码案例:头文件DoubleLink.h#ifndef DOUBLE_LINK_HXX #define DOUBLE_LINK_HXX #include &lt;iostream&gt; using namespace std; //一个节点 template&lt;class T&gt; struct DNode { public: T val...

久久乐 2万+

linux mmap系统调用

brk/mmap linux 提供了两个比较重要的系统调用brk 和mmap,用于向内核申请相应用户空间,内核会根据系统运行状态判定是否申请新的VMA来管理新申请的用户空间,brk和mmap在整个系统中都占有非常重要的地位。 brk()系统调用被gblic进行了进一步封装成malloc接口,用户层程序一般都是通过调用malloc,由glibc间接调用brk来向内核申请用户空间。brk申请的用户空间属于堆空间 mmap系统调用也可以向内核申请用户空间,不过与brk不同的师,mmap申请的空间属于mma.

weixin_42730667的博客 1276

深度学习工具包 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")

【数据结构】之双向链表、双端(双向)链表、循环(双向)链表

双向链表、双端(双向)链表、循环(双向)链表示意(简)图: 声明:下面各图中,箭头指向的是整个节点,而不是指向节点中的prior或next。 双向链表:只有一个指针指向最开始的结点。 双端(双向)链表:有两个指针分别指向两端的节点。 循环(双向)链表:指向形成一个闭环。 双端(双向)链表的Java实现(简单示例): 注:双向链表、双端(双向)链表、循环(双向)链表的实现思路...

JustryDeng 2211

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

c++ 双向链表类模板的一种详细、简单的写法

双向类模板链表 一.双向链表 首先我们要复习下双向链表的大概思路: (当然实际储存并不这样摆放的,只是便于理解1) 这是一个节点的基本结构: prev:是一个指向前面一个节点的指针。 next: 是一个指向后面一个节点的指针。 data: 任意T类型的数据。 图例: (三个节点:head, 中间,tail) 可以看到 中间节点的prev存放着head这个节点的地址 中间节点的next存放着tali这个节点的地址 二.双向链表类模板的思路 分为三部分: 节点的构造(struct Node) 代码:

that_good的博客 1934

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构与算法(九)双向链表

最后总结一下,双向链表相对于单链表来说,是要更复杂一点,每个结点多了一个prior指针,对于插入和删除操作的顺序大家要格外小心。关键就在于交换的过程中不要出现矛盾,例如第四步先被执行了,那么p->prior就会提前变成s,使得插入的工作出错。需要注意的是,在这里,由于这个是双向链表,那么对于链表中的某一个结点p,它的后继结点的前驱结点就是他自己。这就特别地麻烦,所以我们都知道,后来的火车就都有两个头了。这也是双向链表存在的必要性。如果刚才的插入操作理解了,那么接下来的删除操作理解起来就容易多了。

less_duuuzx的博客 994

【数据结构】双向链表 C++

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。val:存储每个节点的权值;last:指向每个节点的前面的第一个节点;next:指向每个节点的后面的第一个节点;T value;value=0;

m0_73020012的博客 2694

Nginx 双向链表 ngx_queue_t

本文详细介绍了 nginx 中双向链表 ngx_queue_t 的数据结构,详解了实现代码和使用案例

我要出家当道士 1363

iOS中的链表 - 双向链表

双向链表是一种链式存储结构,由一系列节点构成。每个节点包含三部分:数据部分、指向下一个节点的指针(后继指针)以及指向前一个节点的指针(前驱指针)。这种结构允许在链表中向前和向后遍历,从而提供了更大的灵活性。在双向链表中,头节点的前驱指针通常指向空,尾结点的后继指针也指向空。通过双向链接,插入和删除节点操作变得更加高效,因为可以直接访问前驱和后继节点,而不需要从链表的一端遍历到目标节点。双向链表是一种强大且灵活的数据结构,能够在许多场景中提升操作效率,尤其是在需要频繁插入、删除和双向遍历的应用中。

weixin_39339407的博客 1003

C#进阶学习(五)单向链表和双向链表,循环链表(中)双向链表

本文手动实现了一个双向链表的模板,同样介绍了在C#中为我们提供的链表类

FAREWELL00075的博客 1551

双向链表学习

双链表是一种链式存储结构,每个节点包含数据域和两个指针域(prev指向前驱节点,next指向后继节点),支持双向遍历。其核心操作包括:创建链表、插入(头插、尾插、指定位置前后插入)、删除(指定节点、按位置删除)、查找(按值、按位置、快慢指针找中间节点)等。双链表相比单链表具有双向遍历、插入删除高效(O(1)时间复杂度)等优势,但也存在空间开销大、实现复杂度高、缓存性能较差等缺点。关键操作通过指针调整实现,如插入时修改前后节点的指针关系,删除时断开节点连接并释放内存。

weixin_45854148的博客 1003

c# 数据结构 链表篇 有关双向链表的一切

本人能力有限,如有不足还请斧正。

咩咩的博客 1285

C# 双向链表介绍

C# 双向链表介绍

R3333355726856的博客 1656

java基础——树 双向链表 简单的java实现

双向链表是LinkedList的基础数据结构,树是准备为接下来的HashMap打下基础。就用链表的形式简单的实现了一哈 双向链表和简单的二叉树 树方面肯定是要做深度的研究,这里只是简单的标识一下 public interface Acctor<T> { void acctpor(T t); } public class LinkedArray<T> { pr...

Hello Turing-Tang 657
上一篇: 食物链(并查集)+(有点难度)
下一篇: (暴力题+技巧(从来没有用过的方法))
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值