单链表

/ c++ 实现///////////

//单列表遇到的坑因为传的是指针plink=plink->next 后原来plink的头结点变了因此要在开始保存原来的头结点同时返回头结点

//单列表遇到的坑因为传的是指针plink=plink->next 后原来plink的头结点变了因此要在开始保存原来的头结点同时返回头结点
#include<iostream>
using namespace std;
typedef struct node{
    int Num;
    struct node* next;
}  link;
typedef struct node* plink;
//创建结点
plink Create_link(int num)
{
    plink lp;
    lp=(plink)malloc(sizeof(link));
    lp->Num=num;
    lp->next=NULL;
    return lp;
}
//创建环
plink Create_link_list(int Lsum)
{
    plink pHead;//头结点
    plink temp;//临时变量
    plink pnow;//当前结点
    pHead=Create_link(0);//先创建一个头结点
    pnow=pHead;//当前结点等于头结点
    for (int i = 1; i<Lsum; i++) {//由于头结点创建了因此从第二个开始
        temp = Create_link(i);//创建临时结点
        pnow->next=temp;//创建的结点给当前结点(头结点)的next指针
        pnow = temp;//当前结点变为新创建的结点
    }
    pnow->next=NULL;//当前结点为最后一个
//    pnow->next=pHead;//当前结点为最后一个  表示环
    return pHead;
}
//求列表的长度
int Length_link_list(plink pl)
{
    plink pHead;
    pHead=pl;//先保存头结点
    int n=1;
    while (pl->next) {
        ++n;
        pl=pl->next;
    }
    pl=pHead;//还原头结
    return n;
}
//指定数据删除某个结点
plink Delete_link_list(plink pl, int num)
{
    plink pHead, p , q;//q 是哨兵
    pHead=pl;//这里必须要保存头结点,因为是指针循环之后不是头结点了
    p=pl;
    //思路如果没到相等那个一直循环把当前结点给哨兵同时 p++ (如果相等也就是p是要删除的那个,不进入循环,由于哨兵一直是 p 的前一个,因此用哨兵的next指向p->next->next)
    //不能是第一个与最后一个
    while (p->Num!=num) {
        q=p;
        p=p->next;
    }
    q->next=p->next;
    free(p);
    return pHead;
}
//打印
plink Prinf_link_list(plink pl)
{
    plink pHead,p;//pHead保存头结点
    pHead=pl;
    p=pl;
    while (p->next) {
        cout<<p->Num<<endl;
         p=p->next;
    }
    if(p->next==NULL) cout<<p->Num<<endl;
    return pHead;
}
int main()
{
    plink pl = Create_link_list(10);
    Prinf_link_list(pl);
    cout<<Length_link_list(pl)<<endl;
    cout<<"///"<<endl;
    plink plnum = Delete_link_list( pl, 4);
    Prinf_link_list(plnum);
    cout<<Length_link_list(pl)<<endl;
    return 0;
}

/ java 实现/

遇到的坑在 java 中不像 c++ java 是完全面向对象因此所有对象都要 new 出来不然报空指针 NullPointerException

package javaapplication2;

/**
 *
 * @author allenboy
 */
public class Node {
       public int Num;//数据域
       Node next;//指针域
}


package javaapplication2;
/**
 *
 * @author allenboy
 */
public class testjava {
    public Node first; // 定义一个头结点
    //构造函数初始化first 在 java 中所有对象都要 new 出来
    public testjava() {
        //不写这句报NullPointerException错误
        this.first = new Node();
    }
    //创建单个结点
    public Node Create_link(int n){
        Node newnode =new Node();
        //赋值
        newnode.Num=n;
        newnode.next=null;
        return newnode;
    }
    //创建列表
    public Node Create_link_list(testjava test,int Lsum)
    {
        Node q = first;//先把头结点保存
        for(int i = 1;i<Lsum;i++){
            Node temp = test.Create_link(i);
            first.next=temp;
            first = temp;
        }
        return q;
    }
    //打印
    public void Prinf_link_list(Node pl){
         Node p;//pHead保存头结点
         p=pl;
         while(p.next!=null)
         {
         System.out.println(p.Num); 
         p=p.next;
         }
         if(p.next==null) System.out.println(p.Num); 
    }

    public static void main(String[] args)
	{
            testjava testjava =new testjava();
            Node pl = testjava.Create_link_list(testjava,22);
           testjava.Prinf_link_list(pl);
        }
}

/ python 实现/


# -- coding: utf-8 --

#python 中遇到的坑与 java 一样 用类做为列表时 第一个头结点必须初始化(self.head=node(0))
#声明一个结点类
class node(object):
    def __init__(self,num):
      self.Num=num
      self.Nnext = None
#列表类
class LinkList(object):
#初始化头结点
    def __init__(self):
        self.head=node(0)
#创建列表
    def Create_link(self, num):
       myhead = self.head
       for i in range(1,num):
           newnode = node(i)
           myhead.Nnext =newnode
           myhead = myhead.Nnext
#打印结点
    def Prinf_link_list(self,num):
        myhead = self.head
        for i in range(0, num):
            print (myhead.Num)
            myhead= myhead.Nnext

if __name__=='__main__':
    link = LinkList()
    link.Create_link(100)
    link.Prinf_link_list(100)

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-haidragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值