c++数据结构代码整理_数据结构如何学

0. 前言

0.1 说明

本系列一共分三期,主旨是让广大小白了解和入门数据结构。这是第三期:《数据结构如何学》。

0.2 书山有路勤为径

学习没有捷径,有的话那叫天赋。数据结构本身就是一门较为枯燥漫长的学科,首先要摆正态度一步一个脚印,少看什么《二十天入门到精通》这样的书和课程。

  1. 这些是为赶着面试的人用的。

  2. 是给非科班或者前端这样与数据操作较远的人用的。

这些是剑术,并非内功。

1. 学校课堂

认真听课是必须的好吧。

8c8d682b2e08fc8591d038d074044ad5.png

1.1 前期内容及时消化

前期老师讲的会比较详细和简单,一定要在这个时候及时消化。

  1. 前期是所有的基础!

比如链表,这章的重点是清晰的明白链式结构是什么,比如后面的二叉树结构就很大部分用到了链式结构的递归性。

34a104750c837dcb52fe84262571e71d.gif

要是前期崩了,那就等着下个学年重开吧!

daea88c60cf84f9cf9ac518adda77ee3.png

1.2 要克服前期的所有困难

  1. 没时间就找时间

因为我们的课本是c语言版本的,我们大一学的是c++,所以会有不适应。

找时间自己把c语言学了,这其实并不难,因为有了C++基础(因为了解到很多人数据结构劝退居然是卡在编程语言...)

0ca92e6ecf8c5c86c5715615304cfd12.png

数据结构和算法都是思想,不应该局限在某一语言中。(内功可以御剑,亦可以御任何兵器)

1.3 给自己信心

数据结构是一种思想,与代码能力相关性较小,如果你大一学的并不好不要着急,更不要否定自己。

大二都不用跑操了,每天睡醒就多补补不会的。

c1a6c80501d9e1ac202200504d5862c8.png 999883e30495a35d8e8bafe24b6b0fa2.png

<<< 左右滑动见更多 >>>

大二一年才是大学灵魂所在。真的,给自己信心很重要。

2. 课后学习

2.1 课本练习

  1. 不要眼高手低

课本上的伪代码都要自己亲手实现出来,虽然有时候你理解内容了,但是实现上面还是会愈要很多困难的,解决这些困难你会发现,不知不觉当中代码能力提升了一个水平。

053ff323072ab65180be620d48a26fff.png

但是要记得写注释!!!

e6a7f00e696bba346789596702844d0a.png

2.2 主动找学习资源

如果你课堂很遗憾,并没有听懂。要第一时间去找视频学习。

fcf002831c39305a3c8e4d6cd5879140.png 9e7e4ae7d540bb16626c2fa9fe4ad20a.png

<<< 左右滑动见更多 >>>

说真的,找书本没用,你需要是去看网上的学习视频。

(1) 视频找到很多,而且能重复看(你们网课过,应该都懂吧)(2) 可以看弹幕,随时问问题和看别人的理解。

这里只推荐两个平台 (多了反倒不好,没有选择也许是最好的选择哈)

  1. 哔哩哔哩

    推荐:王卓老师的数据结构[1]

  2. 慕课网

    推荐:C++实现《数据结构》

3. 多练项目

项目其实不着急,网上有很多

这里为了让你们感受数据结构的魅力,我用贪吃蛇这一个例子。

d70a3b8f49e18787362484a5721132a7.gif

47行代码制作贪吃蛇[2]游戏(源代码如下)

#include
#include
#include
int main(){
 int hX = 7, hY = 7, len = 4, i = 0, map[900] = { 0 };//头坐标,蛇长,循环变量,地图(-1:食物;0:空白;>0:蛇身)
 char c = 'd', cl = 'd', deaw[1801] = { 0 };//初始方向,输入缓存,绘制缓存
 system("mode con: cols=60 lines=30");//修改控制台窗口大小
 srand((unsigned)malloc(1));//初始化随机数种子
 for (map[rand() % 900] = -1; 1; Sleep(100))//生成食物,延时
 {
  if (_kbhit() && (cl = _getch()))//判断是否输入
   switch (cl)
   {
    case 'a':case 'A':if (c != 'd')c = 'a'; break;//判断与原方向是否冲突
    case 'd':case 'D':if (c != 'a')c = 'd'; break;
    case 's':case 'S':if (c != 'w')c = 's'; break;
    case 'w':case 'W':if (c != 's')c = 'w'; break;
   }
  switch (c)
  {
   case 'a':hX -= hX > 0  ? 1 : -29; break;//更新头坐标
   case 'd':hX += hX 29 ? 1 : -29; break;
   case 's':hY += hY 29 ? 1 : -29; break;
   case 'w':hY -= hY > 0  ? 1 : -29; break;
  }
  if (map[hY * 30 + hX] > 1)exit(!_getch());//判断是否吃到自己
  if (map[hY * 30 + hX] == -1)//判断是否吃到食物
  {
   len++;
   do i = rand() % 900;
   while (map[i]);//保证食物生成位置为空地
   map[i] = -1;
  }
  else for (i = 0; i 900; i++)//全部蛇身值-1
   if (map[i] > 0)map[i] -= 1;
  map[hY * 30 + hX] = len;//蛇头赋值
  for (i = 0; i 1800; i++)//更新绘制缓存
  {
   if (map[i / 2] == 0)deaw[i] = ' ';
   else if (map[i / 2] > 0)deaw[i] = (i % 2) ? ')' : '(';
   else deaw[i] = '$';
  }
  system("cls");//清屏
  printf(deaw);//打印
 }
}

里面数据结构用了图和链表。

5312767742e96c169e2191d99640e25e.png

4. 参加竞赛

参加比赛可以说是学习最快的的途径了。

想一想你们每次考试前一晚上看一本书的状态。

就是压力会比较大。

我说一下我大二参加的比赛吧。

4.1 校内比赛

2019年11月25日 校内软件设计大赛(好像学校评委对管理系统情有独钟,但是建议弄得好一点,明年中国大学生软件设计大赛[3]可以直接拿去用)

2019年11月30日 程序设计比赛(主要考一些算法,oj赛制,拿奖可以去参加蓝桥杯[4])

2020年6月19日 中国大学生软件设计大赛(一定要准备充分,把答辩PPT弄好,我就因为时间原因采坑了)——省赛

2020年8月9日 中国大学生软件设计大赛(因为疫情,所以推迟了,采用的是)——国赛

当然还有一些其他的比赛,但是我大二参加过的就这些。希望你们好好计划,我大二就希望有人和我说这些,可惜没有哈,很多踩过的坑都写在上面了,你们可以点赞转发让更多的人知道好吧

4.2 校外比赛

像各大oj平台牛客网、洛谷的比赛,还有华为、阿里、腾讯的比赛等等。

5. 全文总结

5.1 总结

5.2 目录

  • 0. 前言

    • 0.1 说明

    • 0.2 书山有路勤为径

  • 1. 学校课堂

    • 1.1 前期内容及时消化

    • 1.2 要克服前期的所有困难

    • 1.3 给自己信心

  • 2. 课后学习

    • 2.1 课本练习

    • 2.2 主动找学习资源

  • 3. 多练项目

  • 4. 参加竞赛

    • 4.1 校内比赛

    • 4.2 校外比赛

  • 5. 全文总结

    • 5.1 总结

    • 5.2 目录

  • 6. 结尾

6. 结尾

相信这篇文章看完之后大家对《数据结构如何学》一定已经有了很好的理解了。

eb0995760a40c9800aaf01244cde9ba0.png cb87fe9aa17f320575f2b1ed457ab53f.png

<<< 左右滑动见更多 >>>

本系列完结啦!

在这里感谢我的指导老师马翩翩,

带我入门数据结构,还与我交流了这么多。

参考资料

[1]

王卓老师的数据结构: "https://www.bilibili.com/read/cv3285768"

[2]

贪吃蛇游戏: "https://baike.baidu.com/item/%E8%B4%AA%E5%90%83%E8%9B%87/9510203?fr=aladdin"

[3]

中国大学生软件设计大赛: "http://2020.jsjds.com.cn/"

[4]

蓝桥杯: "https://baike.baidu.com/item/%E8%93%9D%E6%A1%A5%E6%9D%AF"

内含资源如下: 1.基本数据结构 1.1.Array ........... 动态数组 1.2.LinkedList ... 链表 1.3.BST .............. 二分搜索树 1.4.MapBST ..... 二分搜索树(用于实现映射) 1.5.AVLTree ...... AVL树 2.接口 2.1.Queue ........... 队列接口 2.2.Stack .............. 栈接口 2.3.Set .................. 集合接口 2.4.Map ............... 映射接口 2.5.Merger .......... 自定义函数接口 2.6.UnionFind ..... 并查集接口 3.高级数据结构 3.1.ArrayQueue .......................... 队列_基于动态数组实现 3.2.LinkedListQueue .................. 队列__基于链表实现 3.3.LoopQueue ........................... 循环队列_基于动态数组实现 3.4.PriorityQueue ....................... 优先队列_基于最大二叉堆实现 3.5.ArrayPriorityQueue ............. 优先队列_基于动态数组实现 3.6.LinkedListPriorityQueue ..... 优先队列_基于链表实现 3.7.ArrayStack ............................. 栈_基于动态数组实现 3.8.LinkedListStack ..................... 栈_基于链表实现 3.9.BSTSet ..................................... 集合_基于二分搜索树实现 3.10.LinkedListSet ....................... 集合_基于链表实现 3.11.BSTMap ................................ 映射_基于二分搜索树实现 3.12.AVLTreeMap ....................... 映射_ 基于AVL树实现 3.13.LinkedListMap .................... 映射_基于链表实现 3.14.MaxHeap ............................. 最大二叉堆 3.15.SegmentTree ...................... 线段树 3.16.Trie ......................................... 字典树 3.17.QuickFind ............................ 并查集_基于数组实现 3.18.QuickUnion ......................... 并查集_基于树思想实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值