![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【数据结构(C++)】学习记录
neicole
积极乐观,稳扎稳打,一步一个脚印。
展开
-
(2011.10.05) 01_sortproblem.cpp -- 简单的排序方法的探究(C++)
半年没有使用过冒泡法和选择法了,也不是很记得怎么用,前几天,老师叫我随便写个排序出来,我就蒙了,太久没有写过啦,只记得大概的思路,于是就写了个很烂的自我感觉有错的冒泡法出来,这几天,趁着还算是有空,再次看书,思考,找回写简单排序的方法思路。 // sortproblem.cpp -- 简单的排序方法的探究(C++) /** * 探究问题: * 1. 如何使用algorithm中的so原创 2011-10-05 19:05:14 · 1373 阅读 · 0 评论 -
(2011.08.27)优先队列
/** * 优先队列 * 个人感觉,要掌握优先队列并不难,主要掌握以下要点就可以了。 * 1. 左右儿子跟父亲的关系。 * 设数组中位置i,左儿子位置[i*2],右儿子位置[i*2+1]。 * 2. 掌握上滤(percolate up)和下滤(percolate down)的原理。 * 下滤(percolate down) * 把较小的儿子置入空穴,将空穴下滑一原创 2011-08-27 22:12:23 · 2161 阅读 · 0 评论 -
(2011.07.19) 顺序表.cpp -- 最基本的顺序表(经典顺序表)
// 顺序表.cpp -- 最基本的顺序表(经典顺序表) // 完整的class. // List abstract class -- 线性表的C++抽象类声明 template class List() { public: // Reinitialize the list. the client is responsible for // reclaiming the原创 2011-07-19 10:17:17 · 994 阅读 · 0 评论 -
(2011.07.19) 单链表.cpp -- 最基本的单链表C++
// 单链表.cpp -- 最基本的单链表C++ // Singly-linked list node template class Link { public: Elem element; // value for this node Link *next; // pointer to next node in list Link(const Elem原创 2011-07-19 11:43:05 · 2150 阅读 · 0 评论 -
(2011.07.20) 双链表.cpp -- 最基本的C++双链表
// 双链表.cpp -- 最基本的C++双链表 // Doubly-linked list link node with freelist support template class Link { private: static Link* freelist; // Head of the freelist public: Elem element; // V原创 2011-07-20 11:52:17 · 1109 阅读 · 0 评论 -
(2011.07.20) 链式栈 // Link list-based stack implementation
// 链式栈 // Link list-based stack implementation template class LStack: public Stack { private: Link* top; // Pointer to first element int size; // Count number of elements public:原创 2011-07-20 19:26:49 · 845 阅读 · 0 评论 -
(2011.08.04)二叉树的结点ADT
// 二叉树的结点ADT /********************************************* 看了这个ADT以后,发觉: 原来二叉树的结点的类定义,只要七种函数: 而它们,都有共通点,看了下面的内容就会明白了。 1. 元素的值,返回和设定; 2. 左结点,返回和设定; 3. 右结点,返回和设定。 第七种函数是判断值是否为空。 **************原创 2011-08-04 09:39:05 · 1183 阅读 · 0 评论 -
(2011.08.05)二叉树结点类的声明
这个二叉树结点类的声明是继承了一个二叉树的结点的抽象数据类型的,然后,其中,可以看到,二叉树结点类的声明,主要还是有七个函数,跟前面的BinNode几乎是一样的,其中私有数据成员有三个,一个是该结点的值,然后另外两个是这个二叉树的左结点和右结点的指针。公有函数有七个,其中有一个是判断是否为最后结点,其它六个是左右结点和数据的读取与写入。 在这个函数,它的效率不算很高,因为结构性开销比较大,n原创 2011-08-05 19:06:54 · 1466 阅读 · 0 评论 -
(2011.08.08)二叉查找树
// 二叉查找树 /*************************************************************************************** BST(Binary Search Tree)二叉查找树能使记录的插入与检索都能很快地完成。 设二叉树的任一结点为K,则从根结点开始,在BST中检索K,如果根结点存储的值为 K,则原创 2011-08-08 21:10:07 · 868 阅读 · 0 评论 -
(2011.07.20) 顺序栈.cpp
// 顺序栈.cpp // Array-based stack implementation template class AStack: public Stack { private: int size; // Maximum size of stack int top; // Index for top element Elem *listAr原创 2011-07-20 19:17:09 · 748 阅读 · 0 评论 -
(2011.08.06)三种不同方式实现对分支结点和叶结点的不同表示
三种不同方式实现对分支结点和叶结点的不同表示 区分叶结点和分支结点的一种方法是使用C++的联合结构,然而,如果叶结点子类型与分支结点子类型的长度差别太大,就会使联合结构变得代效。 第二第三种方法,使用了继承的方法,这样可以更好地区分叶结点和分支结点,基类定义一个虚继承的isLeaf函数以区分它们是属于分支结点还是叶结点,第二跟第三种方法的不同点在于,它们traverse函数实现的位原创 2011-08-06 08:27:17 · 1594 阅读 · 0 评论 -
(2011.08.18)散列表
昨天看了数据结构中的散列的内容,将一些书上的代码敲了一下,加深记忆,当然,也对散列的大部分内容了解了一遍,知道它的原理大概是什么样的了。刚刚开始接触,看前几节的内容,还是很不理解这究竟是什么,散列函数用作什么用,后来,发觉,原来(只是个人理解)最大的作用是定位,找到相对应的位置,可以进行操作了,而,散列表也相当于是将一连串的类,用一个表放起来。 // 504 散列 /** * 散列:是原创 2011-08-18 11:00:43 · 802 阅读 · 1 评论 -
(2011.11.20)02_循环链表举例_约瑟夫(Joseph)环问题.cpp
这次感觉写得挺一般的,逻辑有点乱,功能与功能之间有点混杂,没有将它们一个个小的功能再细分出来。有待改进。大概用了四个小时,编写调试速度也是,有待提高,加油! 源代码: // 02_循环链表举例_约瑟夫(Joseph)环问题.cpp /** * 问题描述及要求: * 01.假设有n个人坐在圆桌周围,从第s个人开始报数,报到m的人出列; * 02.然后再从下一个人开始报数,报到m的人又原创 2011-11-20 18:27:29 · 1429 阅读 · 0 评论 -
(2011.11.26)03_折半插入排序.cpp
// 03_折半插入排序.cpp /** * -> 编写原因: * 1. 前些天看了折半插入排序的相关资料,今天也写了一次作业题关于插入排序的 * 现在,在7_a1.cpp的基础上,编写折半插入排序的代码。 **/ /** * -> 折半插入排序思想分析: * 1. 跟名字差不多,也是插入排序的一种,只是跟普通的插入排序有点不同。 * 2. 在普通的插原创 2011-11-26 19:17:53 · 1009 阅读 · 0 评论 -
(2011.11.28) 04_字符串的顺序结构存储.cpp
// 04_字符串的顺序结构存储.cpp /** * 1. 串:串是由零个或多个字符组成的有限连续序列。 * 2. 串的逻辑结构与线性表极为相似,区别仅在于串的数据对象约束为字符集。 * 3. 串的数据结据成员包括存放串的字符数组及存放串的长度。 * 4. 串的基本操作包括构造,析构,添加,删除,搜索. **/ /** * -> 编写过程中网友提醒注意: *原创 2011-11-28 19:05:29 · 1458 阅读 · 0 评论 -
(2011.11.29) 05_谢尔排序(Shell's Sort).cpp
// 05_谢尔排序(Shell's Sort).cpp /** * -> Shellsort * 1. 谢尔排序可以看作是一种插入排序的扩展方法 * 2. 与插入排序法相同的是,它们都是可以看作是一个个新的元素插入到已排好的数组里面的 * 3. 不同点是,在普通的插入排序法中,它是一个个元素比较,也可以理解成,它每个元素与元素间比较的步进是1 * 而在Shell's Sort中原创 2011-11-29 09:25:47 · 892 阅读 · 0 评论 -
(2011.12.01) 06_快速排序(QuickSort).cpp
// 06_快速排序(QuickSort).cpp /** * -> quicksort * 1. 快速排序是内排序中的一种交换排序的方法。 * 2. 快速排序使用了一种经典的分治思想。 * 3. 快速排序是传说中最快的一种已知的排序算法,它的平均运行时间是O(NlongN) * 4. 快速排序最基本的思想: * 01. 通过选取一个pivot枢纽元,原创 2011-12-01 13:03:16 · 1736 阅读 · 1 评论 -
(2011.12.03) 07_归并排序(mergesort).cpp
// 07_归并排序(mergesort).cpp /** * -> mergesort * 1. 归并排序(mergesort)体现的是分治的策略,先分,再治。(divide-and-conquer) * 2. 将一个数组分割成多个数组,然后再将这些数组的元素一个个提取出来,比较,合并放入新的数组当中。 * 3. 先分成最小的子数组,再逐步扩大,再另外分出小的子数组,再扩大原创 2011-12-03 09:49:31 · 1161 阅读 · 0 评论 -
(2011.12.03) 08_堆排序(heapsort).cpp
// 08_堆排序(heapsort).cpp /** * -> heapsort * 1. 所谓堆排序,就是指将一组数看作是一个二叉堆,将其排序。 * 2. 实现堆排序: * 01. 刚刚开始时,数组只是一堆没有排序的随意数,按照题目要求(使用下滤法)选择建立最大堆还是最小堆, * 当选择了建立最大堆的时候,数组就会从小到大排序,当选择的是最小堆,数原创 2011-12-03 15:25:24 · 988 阅读 · 0 评论 -
(2011.12.07) 09_有序表的折半查找.cpp
// 09_有序表的折半查找.cpp /** * -> 适用条件: * 1. 有序表:就是指表中的数据已经按升序或者是降序排好序的表。 * 2. 知识联系:就个人理解,这跟之前所写过的折半排序的思想基本上是一样的,唯一不同的仅是这里面的数据已经排好序了,只需要找到匹配元素就可以了。 * 3. 思想亦是一样,只是跟折半插入排序有点小改动,具体可以参考下面的第4点内容。 **原创 2011-12-07 10:21:28 · 1055 阅读 · 0 评论 -
(2011.08.13)二叉树实例
始终对二叉树的应用有点模糊,从网上找了一个实例,在这里保存一下。 #include #include #include #include #include #include #include using namespace std; #define HeadSTUDENT int //以下是数据类型的定义 enum Status{OK, E转载 2011-08-13 17:54:00 · 1758 阅读 · 0 评论 -
(2011.08.13)二叉查找树类例子
一共买了两本数据结构的书,之前那本的二叉查找树的例子看得不太懂,今天,一看这本书的例子,忽然恍然大悟,原来这个知识也不是很难,只是看你适不适应用递归。原来啊,两本书还是结合着用好,有些例子这本书写得好,有些就是那本书写得好。 下面是二叉查找树类的例子,有些注释自己加上去了,总算是弄懂了。 // 416 二叉查找树类 Binary Search Tree template clas原创 2011-08-13 17:29:22 · 927 阅读 · 0 评论