2022-01-09学习总结


主要学习了链表的有关知识,把学校刷题网站上链表题组刷了六道,基本掌握了链表的概念,如何建立链表,如何将链表进行排序,链表的插入和合并。

题目描述

(线性表)已知一单链表,从第二个结点至表尾递增有序,(设a1<x<an)如下图(“第二个结点至表尾”指a1..an )。试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。

输入格式

输入长度n:7

输入数据:4 1 2 3 6 8 9

输出格式

1 2 3 4 6 8 9

样例输入content_copy

5
11 7 8 9 10

样例输出content_copy

7 8 9 10 11 
#include<stdio.h>
#include<stdlib.h>
struct node{//建立结点
    int date;
    struct node *next;
};
int main()
{
    int n;
    scanf("%d",&n);
    struct node *p,*q,*t,*head;
    head=NULL;
    int f;
    scanf("%d",&f);
    int a;
    for(int i=1;i<n;i++){//建立链表
        scanf("%d",&a);
        p=(struct node *)malloc(sizeof(struct node));
        p->date=a;
        p->next=NULL;
        if(head==NULL){
            head=p;
        }
        else{
            q->next=p;
        }
        q=p;
    }
    t=head;
    while(t!=NULL){
            if(t->next==NULL||t->next->date>f){//将第一个数字插入到链表的合适位置
                p=(struct node *)malloc(sizeof(struct node));
                p->date=f;
                p->next=t->next;
                t->next=p;
                break;
            }
            t=t->next;
    }
    t=head;
    while(t!=NULL){//输出链表
        printf("%d ",t->date);
        t=t->next;
    }
}

 

 

题目描述

(线性表)已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该链表以外的任何链结点空间。

输入格式

自定义链表节点数

m=5

3 1 5 4 6

输出格式

1 3 4 5 6

样例输入content_copy

8

10 1 5 14 32 55 67 6

样例输出content_copy

1 5 6 10 14 32 55 67 

思路 

链表排序可分为直接将链表里的数值交换和将结点交换两种,这里用到的是前者,运用冒泡排序将链表进行排序。

 

#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
    int date;
    struct list *next;
}node;
int main()
{
    int n;
    scanf("%d",&n);
    node *p,*q,*t,*head;
    int a;
    head=NULL;
    for(int i=0;i<n;i++){//建立无头结点的链表
        scanf("%d",&a);
        p=(node *)malloc(sizeof(node));
        p->date=a;
        p->next=NULL;
      if(head==NULL){
        head=p;
      }
      else{
        q->next=p;
      }
        q=p;
    }
  q=head;
    int temp;
    for(int i=0;i<n-1;i++){//运用冒泡排序将链表进行排序
        for(int j=0;j<n-i-1;j++){
            if(q->date>q->next->date){
                temp=q->date;
                q->date=q->next->date;
                q->next->date=temp;
            }
            q=q->next;
        }
        q=head;
    }
    p=head;
    while(p!=NULL){//输出链表
        printf("%d ",p->date);
        p=p->next;
    }
}

 


题目描述

已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点

输入格式

输入长度n:6

 输入数据:4 2 6 88 34 6

输出格式

2 4 6 88 34 6

样例输入content_copy

5
11 6 8 7 9

样例输出content_copy

6 11 8 7 9 
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int date;
    struct node *next;
};
int main()
{
    int n,a;
    scanf("%d",&n);
    struct node *head,*p,*q,*t;
    head=NULL;
    for(int i=0;i<n;i++){//建立链表
        scanf("%d",&a);
        p=(struct node *)malloc(sizeof(struct node));
        p->date=a;
        p->next=NULL;
        if(head==NULL){
            head=p;
        }
        else{q->next=p;
        }
        q=p;
    }
    t=head;
    int min=head->date;
    while(t!=NULL){//找出链表中的最小值
        if(min>t->date){
            min=t->date;
        }
        t=t->next;
    }
    t=head;
    while(t!=NULL){//查询最小值的位置
        if(t->next->date=min){
            t->next=t->next->next;
            break;
        }
        t=t->next;
    }
    p=(struct node *)malloc(sizeof(struct node));//将最小值插入链表首部
    p->date=min;
    p->next=head;
    t=p;
    while(t!=NULL){//输出
        printf("%d ",t->date);
        t=t->next;
    }
}

题目描述

小T昨天很不爽
昨天路过体彩销售点买了2注生日号码玩,当晚开奖后……
小T号码: 8902088
中奖号码:3902888
一个号码不对就差了十几万……
小T想:为什么规则是那样玩的啊……为什么5个号码要连续才能中二等奖啊……
我自己创建个规则,开N个数字,只要数字位置对了不一定要连续就可以有奖。
现在有一个中奖号码,有一个兑奖号码,小T想知道一共有多少个数字位置正确的,N太大了……

要求用链表做

输入格式

输入数据第一行包含一个整数T表示有T组测试数据

对于每组测试数据

第一行包含一个整数N,表示有N个数字

第二行包含N个中奖号码

第三行包含N个兑奖号码

输出格式

对于每组测试数据输出有多少个号码位置正确了

样例输入content_copy

2
7
3902888
8902088
10
1234567890
0987654321

样例输出content_copy

5
0

 

 思路

建立两个数据为字符型的链表,一个结点存一个数,将两个链表进行比较,输出相同位置为相同数字的个数。

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    char date;
    struct node *next;
}link;
link *creat(int n)//建立链表
{
    link *head,*p,*q;
    head=(link *)malloc(sizeof(link));
    q=head;
    while(n--){
        p=(link *)malloc(sizeof(link));
        scanf("%c",&p->date);
        q->next=p;
        q=p;
    }
    q->next=NULL;
    return head;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        int n,s=0;
        scanf("%d",&n);
        link *p1,*p2,*q1,*q2,*t2,*t1,*head1,*head2;
        getchar();//不能忘了吸收一个换行
head1=creat(n);
        getchar();
        head2=creat(n);
        getchar();
        t1=head1->next;
        t2=head2->next;
        while(t1!=NULL&&t2!=NULL){//计算相同位置相同数字的个数
            if((t1->date)==(t2->date)){
                s++;
            }
            t1=t1->next;
            t2=t2->next;
        }
        printf("%d\n",s);
    }
}

题目描述

知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。

输入格式

m=5

3 6 1 3 5

n=4

7 10 8 4

输出格式

3 6 1 3 5 7 10 8 4

样例输入content_copy

m=7
3 5 1 3 4 6 0

n=5
5 4 8 9 5

样例输出content_copy

3 5 1 3 4 6 0 5 4 8 9 5 

思路

建立两个链表,将第一个链表的最后一个结点的next部分连接到第二个链表的有数值的第一个结点,即可实现链表合并。

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

typedef struct node
{
    int date;
    struct node *next;
}link;
link *creat(int n)//建立链表
{
    link *head,*p,*q;
    head=(link *)malloc(sizeof(link));
    q=head;
    while(n--){
        p=(link *)malloc(sizeof(link));
        scanf("%d",&p->date);
        q->next=p;
        q=p;
    }
    q->next=NULL;
    return head;
}
int main()
{
    int m,n;
     link *p1,*p2,*q1,*q2,*head1,*head2,*t;
    scanf("m=%d",&m);

     head1=creat(m);
     getchar();//吸收换行
getchar();
     scanf("n=%d",&n);

        head2=creat(n);
        t=head1;
        while(t!=NULL){//将第一个链表和第二个链表连接
            if(t->next==NULL){
                (t->next)=(head2->next);
                break;
            }
            t=t->next;
        }
        /*(q1->next)=(head2->next);*/
        t=head1->next;
        while(t!=NULL){//输出合并后的链表
            printf("%d ",t->date);
            t=t->next;
        }

}

题目描述

(线性表)假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

输入格式

输入长度n:5

输入数据:1 2 5 6 8

输入长度m:5

输入数据:3 4 7 9 10

输出格式

10 9 8 7 6 5 4 3 2 1

样例输入content_copy

4
7 9 10 11
4
8 12 13 14

样例输出content_copy

14 13 12 11 10 9 8 7 

 

思路

前两题链表排序和链表合并

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int date;
    struct node *next;
}link;
link *creat(int n)//建立链表
{
    link *head,*p,*q;
    head=(link *)malloc(sizeof(link));
    q=head;
    while(n--){
        p=(link *)malloc(sizeof(link));
        scanf("%d",&p->date);
        q->next=p;
        q=p;
    }
    q->next=NULL;
    return head;
}
int main()
{
    int m,n;
     link *p1,*p2,*q1,*q2,*head1,*head2,*t;
    scanf("%d",&m);
     head1=creat(m);
     scanf("%d",&n);
        head2=creat(n);
        t=head1;
        while(t!=NULL){//将两个链表合并
            if(t->next==NULL){
                (t->next)=(head2->next);
                break;
            }
            t=t->next;
        }
        t=head1->next;
    int temp;
    for(int i=0;i<n+m-1;i++){//将合并后的链表进行排序
        for(int j=0;j<n+m-i-1;j++){
            if((t->date)<(t->next->date)){
                temp=(t->date);
                (t->date)=(t->next->date);
                (t->next->date)=temp;
            }
            t=t->next;
        }
        t=head1->next;
    }
         t=head1->next;
        while(t!=NULL){//输出
            printf("%d ",t->date);
            t=t->next;
        }
    }

学习时长:10h

明日目标:

将链表的题刷完

然后学习搜索算法 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nlp2022-text-classification-master 是一个 NLP(自然语言处理)的项目,用于文本分类。 该项目的目的是利用自然语言处理技术,对文本进行分类。文本分类是指根据文本的内容和特征将其归类到不同的类别中。例如,可以通过分析一段电影评论的内容,将其分类为积极或消极评价。 nlp2022-text-classification-master 项目使用了一些常见的文本分类算法和技术,如词袋模型、TF-IDF 特征提取、多层感知机等。这些技术可以帮助我们将文本转化为可用于分类的数值特征,并通过机器学习算法进行分类。 该项目提供了一些示例数据集,可以用于训练和测试文本分类模型。通过对这些数据集进行训练,可以得到一个文本分类器,能够对新的文本数据进行分类。 除了提供示例数据集和算法实现,nlp2022-text-classification-master 还提供了一些辅助工具和函数,用于数据预处理、特征选择、模型评估等。这些工具和函数可以帮助我们更方便地进行文本分类任务。 总之,nlp2022-text-classification-master 是一个用于文本分类的 NLP 项目,通过利用自然语言处理技术和机器学习算法,能够对文本进行分类,并提供了一些辅助工具和函数,方便进行文本分类任务的开发和研究。 ### 回答2: nlp2022-text-classification-master 是一个 NLP(自然语言处理)项目的命名,其主要功能是文本分类。文本分类是NLP中的一个重要任务,它旨在根据给定的语料库或文本集合,将不同的文本分成不同的类别或标签。 nlp2022-text-classification-master 项目很有可能是一个用于研究或学习文本分类的项目。项目的名称中的 "nlp2022" 可能表示该项目与2022年相关,意味着它是最新的或者与当年的研究/学习计划有关。"master" 可能表示它是一个主要版本或主分支。 在该项目中,我们可以期待看到一些典型的文本分类相关内容。这可能包括数据预处理,特征提取,模型构建和训练,以及评估模型性能的指标。另外,该项目可能还包括一些实例数据集和示例代码,以便用户可以快速开始自己的文本分类任务。 对于文本分类的具体实现,可能会使用一些常见的机器学习算法或深度学习模型,如朴素贝叶斯分类器、支持向量机、卷积神经网络(CNN)或循环神经网络(RNN)。这些算法和模型都在文本分类中具有一定的应用价值,并且可以根据具体的任务和数据集进行选择。 总之,nlp2022-text-classification-master 是一个用于进行文本分类的 NLP 项目,通过处理文本数据,提取特征,并利用机器学习或深度学习方法将文本分为不同的类别。该项目可能提供一些帮助用户进行文本分类任务的示例代码和数据集。 ### 回答3: nlp2022-text-classification-master是一个用于自然语言处理(NLP)的文本分类项目。该项目的主要目标是使用机器学习和深度学习技术,对文本数据进行分类。在NLP的研究领域中,文本分类是一个重要且有挑战性的任务,其目的是将文本数据分配到预定义的类别中。 该项目提供了一个完整的解决方案和代码库,供研究人员和开发者使用。它包含了多个文本分类算法和模型的实现,例如朴素贝叶斯分类器、支持向量机(SVM)、卷积神经网络(CNN)和循环神经网络(RNN)等。这些算法和模型可用于处理不同类型的文本数据,如电影评论、新闻文章、社交媒体帖子等。 此外,该项目还提供了一个预处理流程,用于将原始文本数据转换为机器学习算法可以处理的数值特征。这个预处理流程包括文本分词、词向量化、特征选择和数据划分等步骤,以确保输入数据的质量和可用性。 通过使用nlp2022-text-classification-master,用户可以根据自己的需要轻松构建和训练文本分类模型。他们可以通过添加自定义的特征工程方法或改进现有的分类算法,来提高模型的性能。此外,该项目还提供了评估指标和可视化工具,用于评估模型的性能和分析结果的可解释性。 总之,nlp2022-text-classification-master是一个功能强大且易于使用的文本分类项目,可帮助用户在NLP领域中进行文本分类任务的研究和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值