数据结构
shaozhenghan
GitHub: https://github.com/shaozhenghan
展开
-
数据结构(一):入门
今天开始补数据结构。其实以前也学过,都忘了,今天开始一点点补回来。1. 什么是数据结构数据结构由数据和结构组成,它是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科,数据结构是数据存储的方式。2. 什么是算法算法是处理数据的方法,通常我们通过分析算法的时间复杂度和空间复杂度来判断它的好坏。数据结构的不同就会导致算法的不同,数据结构的选择对算法效率会...原创 2018-08-15 02:40:20 · 2999 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第8集:冒泡,选择排序,递归)
0. 前言 这门课讲的排序相当清楚,老师用很容易懂的方式讲原理,代码部分在linux下写,用gdb调试,这才是编程的学习方法。记得以前国内本科也学过,但根本没讲清楚。现在研究生又听这门公开课,发现把原理说清楚之后,代码自己很容易就实现了。另外gdb调试工具也很好用很重要,但国内学的时候老师甚至没有提过。1. gdb 调试工具的用法几个命令:run,break, continue, ...原创 2018-07-30 02:19:12 · 2500 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码实现(第9集:归并排序)
用递归算法实现归并排序伪代码如下:if n < 2 return;else sort left half of elements; sort right half of elements; merge sorted halves; 例子:4,2,6,8,1,3,7,5 从小到大排序n < 2? nosort l...原创 2018-07-31 01:41:48 · 412 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第12集:单链表,内存分配)
1. 数组的优缺点数组元素是连续的存储在有限的内存里,这样有两个缺点:--数组的大小是有限的。如果需要给数组的内存(缓冲区buffer)扩容,需要调用realloc()函数。realloc()的工作原理:在内部调用malloc()来分配一块新的内存,然后用循环将原先内存的内容拷贝到新内存,然后free()掉原来的内存,返回新内存的地址。--不方便进行元素的插入与删除。因为元素连续存储,...原创 2018-08-04 03:57:57 · 892 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第14集:栈,队列,哈希表,树)
周末写代码--------------------------------2018.8.7---------------------------1. stack 栈stack 后进先出(LIFO)结构。下面用数组实现栈,用malloc使栈的容量可扩展。stack.c这里要特别注意:(1) Destroy()函数中,free(s->data); 以及 s->dat...原创 2018-08-08 03:07:30 · 958 阅读 · 0 评论 -
C++11 标准特性:指向数组首元素和尾后元素的指针(附归并排序代码)
数组是以指针形式传递给函数的,所以函数一开始并不知道数组的确切尺寸,所以应该提供一些额外的信息。C++中常用方法有两种:1. 显示地传递一个表示数组大小的形参,这也是C语言和C++11标准之前常用的; 2. 在C++11标准中,可以传递指向数组首元素和尾后元素的指针,下面的代码我用了这种方法。这类似于容器类型的迭代器,但因为数组不是类类型,所以这两个函数不是成员函数,使用方法为:int * b...原创 2018-08-06 01:41:46 · 1893 阅读 · 0 评论 -
数据结构(二):线性结构之线性表
数据结构中的逻辑结构分为线性结构和非线性结构,线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:1.集合中必存在唯一的一个"第一个元素"; 2.集合中必存在唯一的一个"最后的元素"; 3.除最后元素之外,其它数据元素均有唯一的"后继"; 4.除第一元素之外,其它数据元素均有唯一的"前驱"。其中线性表是最常用且最简单的一种线性数据结构。线性表是一个含有n≥0个结点的有限序列...原创 2018-08-16 01:55:04 · 281 阅读 · 0 评论