历年408统考数据结构线性表大题破解方法(一)(附C代码

简介: 历年408统考数据结构线性表大题破解方法(一)(附C代码

关于线性表408考的还是挺频繁的,其实总体来说并不难(暴力破解),要是最优算法在考场上那种气氛还是蛮难想到的。本文主要总结在2010年-2020年的408考试中考过的关于线性表大题破解方法以及代码,废话不多说直接上真题:


2010年大题:

cf76bf2854fe4bd7a82aaa0a231aae23.png


算法思路:这是一道很经典的逆置算法题,可以通过数学的思路设前面的X0,X1,...Xp-1为a序列,后面的X p,Xp+1...Xn-1为b,则我们知道原序列为gif.gif,通过逆置我们可以得到gif.gif,随后对整个数列进行逆置gif.gif。根据这个思路我们可以来构建算法。

代码:

int Turn(int a[],int left,int right,int arraySize)
//逆置算法
{
    if(right<left||arraySize>Maxsize)
    {
        printf("error");
        return 0;
    }
    int temp;
    int i=left,j=right;
    int mid=(left+right+1)/2;
    for(i,j;i<mid;i++,j--)
    {
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
}
int main()
{
    int a[6]={1,2,3,4,5,6};
    //如果设定p为4的话
    Turn(a,0,2,6);
    Turn(a,3,5,6);
    Turn(a,0,5,6);
    for(int i=0;i<6;i++)
        printf("%d ",a[i]);
    return 0;
}

算法时间复杂度为O(n),空间复杂度为O(1)。


2011年大题:

b80e58a529ec494cae39586ef067c18a.png


算法思路:这道题我一拿到想到的就是先进行合并再进行计算。这样做的时间复杂度为,gif.gif标准答案给的是gif.gif。但进入考场本身408时间就紧张,我这里提供暴力算法进行计算。因为这两个序列都是升序序列,所以只要进行合并之后变可以很轻松的获得该中位数。

代码:

int merge_list(int a[],int b[],int n)
{
    int i=0,j=0,k=0;
    int c[2*n];
    while(i<n&&j<n)
    {
        if(a[i]<=b[j])
            c[k++]=a[i++];
        else
            c[k++]=b[j++];
    }
    while(i<n)
    {
        c[k++]=a[i++];
    }
    while(j<n)
    {
        c[k++]=b[j++];
    }
    return c[n-1];
}
int main()
{
    int a[5]={2,4,6,8,20};
    int b[5]={11,13,15,17,19};
    printf("%d",merge_list(a,b,5));
    return 0;
}


算法时间复杂度为O(n),空间复杂度为O(2n)。


这里附上真题标准答案:

int M _ Search(int A[ ],int B[ ],int n){
  int start1, end1, mid1, start2, end2, mid2 ;
  start1 =0;end1 =n-1 ;
  start2 = 0 ; end2 = n- 1 ;
  while(start1 ! = end1 || start2 ! = end2)
  { mid1 = (start1 +end1 )/2 ;
  mid2 = ( start2 +end2 )/2 ;
  if(A[mid1 ] = =B[mid2]) return A[mid1 ] ;
  if( A [ mid1 ]
  {//分别考虑奇数和偶数,保持两个子数组元素个数相等
  if((start1+end1)%2==0){//若元素为奇数个
  start1=mid1; //舍弃A 中间点以前的部分且保留中间点
  end2=mid2; //舍弃B 中间点以后的部分且保留中间点
  }
  else{ //若元素为偶数个
  start1=mid1+1;//舍弃A 的前半部分
  end2=mid2; //舍弃B 的后半部分
  }
  }
  else{
  if((start1+end1)%2=:0){//若元素为奇数个
  end1=mid1; //舍弃A 中间点以后的部分且保留中间点
  start2=mid2; //舍弃B 中间点以前的部分且保留中间点
  }
  else{//若元素为偶数个
  end1=mid1; //舍弃A 的后半部分
  start2=mid2+1;//舍弃B 的前半部分
  }
  }
  }
  return A[start1]
  }

上述所给算法的时间、空间复杂度分别是0(log2n)和0(1)。

目录
相关文章
|
20天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
63 4
|
16天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
43 1
|
2月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
32 1
|
2月前
|
Java C++ 索引
让星星⭐月亮告诉你,LinkedList和ArrayList底层数据结构及方法源码说明
`LinkedList` 和 `ArrayList` 是 Java 中两种常见的列表实现。`LinkedList` 基于双向链表,适合频繁的插入和删除操作,但按索引访问元素效率较低。`ArrayList` 基于动态数组,支持快速随机访问,但在中间位置插入或删除元素时性能较差。两者均实现了 `List` 接口,`LinkedList` 还额外实现了 `Deque` 接口,提供了更多队列操作。
27 3
|
2月前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
38 6
|
2月前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
108 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储
ES6中的Set数据结构的常用方法和使用场景
ES6中的Set数据结构的常用方法和使用场景
|
2月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
31 0
|
2月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
29 0

热门文章

最新文章