关注公众号
*本文作者 罗勇军,来自公众号罗勇军算法竞赛。
前面几讲做了基础练习,熟悉了语法,提高了编码能力,思维得到了锻炼。编程起步了!
如果做过这些题后,你发现自己对编程产生了兴趣,恭喜你,后面的进步将会很快,因为你有了 主动性。竞赛最依赖主动性。
从现在开始,要学点有技术含量的编程了。
真正的编程,从学习基础数据结构开始。
蓝桥杯考点中的数据结构
蓝桥杯“第十六届蓝桥杯大赛软件赛(编程类)知识点大纲”,在大学C组、B组、A组中都有数据结构考点。
大学C组
考点:排序(冒泡排序、选择排序、插入排序)、搜索(bfs,dfs)、二分、高精度(数组的应用)、基础数据结构(栈、队列、链表)。
对应《数据结构》课,这门课 主要有以下内容:数组、队列、链表、栈、串、二叉树、图、查找(二分、哈希等)、排序。
大学B组的 “数据结构”专题,少量知识点出现在大三的《算法设计与分析 》课程中,但是大部分在大学课程中没有。
大学A组的 “数据结构”专题的知识点,在大学的课程中全都没有。
而且不仅是《数据结构》,蓝桥杯还有很多考点,要么是高年级课程的知识点,要么根本就不会在课程上学到,都要自学。
自学是竞赛的基本要求,所以竞赛非常依赖主动性。
算法竞赛的初学者备考蓝桥杯,要学习的知识点有一大半在《数据结构》课程中。
《数据结构》是计算机专业最核心的几门课之一。在我校《数据结构》是大一下学期的课程,有些学校是大二上学期的课程。
很多同学在大一上学期就备考蓝桥杯,显然等不及下学期才学的《数据结构》,需要先自学。
自学的时候,首先要掌握知识点,并能手写相关知识点的代码。手写代码是必须的,这样可以更好地理解知识点。
不过,做竞赛题 时需要手写队列、链表、栈这些基础数据结构吗?
竞赛题很少手写基础数据结构
竞赛有竞赛的做法!一般不用手写基础数据结构,因为可以用库函数,大大减少编码时间!例如:
C++:链表list、 队列queue、栈stack。
《蓝桥杯算法入门C/C++》教材内容:
Python:链表、队列、栈,用 list、deque等实现。
《蓝桥杯算法入门Python》教材内容:
Java:链表LinkedLIst、队列Queue、栈Stack。
《蓝桥杯算法入门Java》教材内容:
数组:数据结构之母
先来练习数组题目 ,大家在学语言的时候肯定学过数组。
数组是最基础的数据 结构,数组也是 数据结构之母。
数组直接对应内存空间。内存是线性排列的连续空间,一个一维数组就是内存中的一段连续空间;二维数组是一维数组的“堆叠”,三维数组是二维数组的“ 堆叠”,等等。
用数组可以编程实现其他所有的数据结构。例如链表、栈、队列、二叉树等等,都可以用数组来编程实现。本讲的队列手写代码是一个例子。
在C/C++和Java语言教材中,都会详细讲解数组的概念和用法。
Python的语言教材可能缺少对多维数组的描述。Python用list实现数组,例子:
数组习题
蓝桥杯题库的简单数组题目不太好找。 可以到洛谷做,有个数组的练习题单:
https://www.luogu.com.cn/training/103
队列
队列(queue)是一种简单的数据结构,是线性结构,也就是说,队列中的元素一个个排列成一条线。
队列的数据存取方式是“先进先出”:只能往队尾插入数据、只能从队头移出数据。
队列在生活中的原型就是排队,例如在网红店排队买奶茶,排在队头的人先买到奶茶然后离开,后来的人排到队尾。
队列的关键:不能插队!也不能从队伍中间离开!
编码时,定义队头head,它始终指向队列中的第一个元素,定义队尾tail,它始终 指向队尾最后一个元素。
手写队列
为了深刻理解队列,需要手写代码。手写实现可以看《蓝桥杯算法入门》。
C++手写队列(Java代码类似) :
Python手写队列:
队列的库函数和例题
一般不用自己手写队列,而是用库函数。
C++:STL queue
Python:duque
Java:Queue
用下面的例题演示队列的基本用法。
约瑟夫环问题
https://www.lanqiao.cn/problems/1893/learning/
问题描述:约瑟夫环问题,即出列游戏:n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出列,依次类推,直到所有的人都出列,请依次输出出列的人的编号。
输入描述:输入两个整数 n,m(1≤m,n≤100)。
输出描述:输出一行n个整数,按顺序输出每个出列的人的编号。
输入样例:
10 3
输出样例:
3 6 9 2 7 1 8 5 10 4
思路:约瑟夫问题是一个经典问题,可以用队列、链表等数据结构实现。用队列模拟报数:方法是反复排队,从队头出去,然后重新排到队尾,每一轮数到m的人离开队伍。
C++代码
Python代码
Java代码
队列习题
蓝桥杯题库:
https://www.lanqiao.cn/problems/
CLZ银行问题1113、模拟队列19878、电子产品加工8486、小桥的神秘礼物盒3746、机器翻译511
------------------------返回搜狐,查看更多
责任编辑: