精华内容
下载资源
问答
  • 复杂度是衡量算法的质量优劣的标准,一般可分为“时间复杂度”、“空间复杂度”。 【题5】 编程实现选择排序 选择是指在每次排序时,选择最大或者最小项,将其放入适当的位置上,反复操作,知道所有的数据排序完成...

    一、复杂度的概念

    复杂度是衡量算法的质量优劣的标准,一般可分为“时间复杂度”、“空间复杂度”。

    【题5】 编程实现选择排序
    选择是指在每次排序时,选择最大或者最小项,将其放入适当的位置上,反复操作,知道所有的数据排序完成为止。
    例如:一个班级学生排队,先将最高的学生排在队首,然后在其他学生中再挑出最高的一个,排在第二的位置,依次类推,直到排完为止。

    /*选择排序*/
    void SelectSortArray(int arr[], n)
    {
    	for(int i=0; i<n-1; i++)
    	{
    		int index = i;   //
    		for(int j=i+1; j < n; j++)    //找出最小元素的下标
    		{
    			if(arr[j] < arr[index])
    			{
    				index = j;
    			}
    		}
    		int temp = arr[index];
    		arr[index] = arr[i];
    		arr[i] = temp;
    	}
    }
    

    【题6】 编程实现冒泡排序

    顾名思义,冒泡排序法,就是把要排序的一组数据中的元素当成一个一个气泡,每次比较相邻两个相邻“气泡”的"轻重’,“气泡”较重的往下"沉",轻的往上”浮“。
    原理:从第一个数开始,依次往后进行相邻两个数之间的比较,如果前面的数比后面的数大就交换这两个数的位置,如果前面的数较小或两者一样大,就不作处理。

    /*冒泡排序*/
    void BubbleSortArray(int arr[],n)
    {
    	for(int i = 0; i < n-1; i++)
    	{
    		for(int j = 0; i < n-1-i; j++)
    		{
    			if(arr[j] < arr[j+1])
    			{
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
    			}
    		}
    	}
    }
    

    【题7】 直接插入排序

    /*插入排序*/
    void insertSortArray(int arr[],n)
    {
    	int curEle, preIndex; //记录当前待排序元素和前一个元素的下标
    	for(int i=0; i < n; i++)
    	{
    		preIndex = i - 1;
    		curEle = arr[i];
    		while(preIndex >=0 && arr[preIndex] > curEle)
    		{
    			arr[preIndex+1] = arr[preIndex];  //移动元素
    			preIndex--;
    		}	
    		//将待排序元素插入新的位置
    		arr[preIndex+1] = curEle;	
    	}
    }
    
    
    展开全文
  • C++数据结构算法

    2021-11-27 14:29:33
    C++数据结构算法 一、提出问题 1、什么是函数重载? 答:具有不同形参列表的同名函数称为函数重载,编译系统根据实参的类型来选择函数,这个过程称为重载解析。 2、什么是运算符重载? 答:在实际应用中,我们常常要...

    C++数据结构算法

    一、提出问题
    1、什么是函数重载?
    答:具有不同形参列表的同名函数称为函数重载,编译系统根据实参的类型来选择函数,这个过程称为重载解析。

    2、什么是运算符重载?
    答:在实际应用中,我们常常要扩展关系运算符对象的类型,比如比较两个结构体中某一变量的值,扩展的逻辑为:先将运算符看作是函数表达式,其函数名为operator加关系符<;通过运算符函数的定义实现运算符对象的类型扩展,称为运算符重载。

    3、什么是浅、深复制?
    答:结构对象通过赋值运算符只能完成浅层对象的复制(浅复制),深层对象的复制则称为深复制。

    4、什么是指向const型的指针和const型的指针?
    答:指针与两个对象有关:一个是它本身,用来存储一个对象的地址;另一个是它所指向的对象,地址就是这个对象的地址。如果指针指向的对象是不允许修改的(const型),那么就称为指向const型的指针,如果指针本身是const型的,则称为const型指针。const型指针在初始化完成后,就不能再指向别的对象。

    6、字面量为什么不能是引用传递中的实参?为什么可以是const型引用传递中的实参?
    答:引用实质上是指向被引用对象的指针,所以引用传递的实质是地址传递,字面量因为不能传址,所以不能是引用传递的实参,即不能是被引用的对象。假设函数是形参为抽象类型Type的值传递:

    void PushBack(SeqList* l, Type item);
    

    因为抽象类型Type可以实例化SeqList类型,所以要改为引用传递,以实现深复制。因为原来是值传递,而值传递不会改变实参的值,所以要改为引用const型的引用传递:

    void PushBack(SeqList* l, const Type& item);
    

    抽象类型Type还可以实例化为整型。因为原来是值传递,而值传递的实参可以是字面量,所以const型引用传递的实参可以是字面量。

    7、什么是默认参数和默认函数?
    答:默认参数是指函数声明中带有默认值的形参。调用函数可以省略相应的实参,编译器将用默认值代替。所有形参都是默认参数的函数称为默认函数。

    二、相关代码片段实例
    1、 运算符重载:

    struct student
    {
    	int id;
    	int score;
    };
    /*想要比较两个student的成绩大小*/
    bool operator == (student x, student y)
    {
    	return x.score == y.score;
    }
    bool operator >(student x, student y)
    {
    	return x.score > y.score;
    }
    
    int main()
    {
    	student s1 = { 2172, 90 };
    	student s2 = { 0007, 90 };
    	cout << (s1 == s2) << endl;
    }
    

    结果将返回一个布尔值,对于未重载的运算符,结果将出错;
    int main()

    {
    	student s1 = { 2172, 90 };
    	student s2 = { 0007, 90 };
    	bool a = s1.score == s2.score;
    	cout << a << endl;
    }
    

    其实比较结构体变量只需要 结构体.变量名 就可以了,不重载运算符也行。
    2、函数重载

    void pfun(int n)
    {
    	cout << n << "  use int pfun" << endl;
    }
    void pfun(char n)
    {
    	cout << n <<"  use char pfun"<< endl;
    }
    void pfun(string n)
    {
    	cout << n <<"  use string pfun" << endl;
    }
    
    int main()
    {
    	pfun('1');
    	pfun(10);
    	pfun("hello world");
    	
    }
    
    展开全文
  • C++快速排序快速排序基本思想快速排序的代码 快速排序基本思想 第一步:找一个基准值(这里选取待排序数组中最左边的值)然后将待排序数组分成三个部分 第一部分:数据全小于基准值 第二部分:数据全等于基准值 第三...

    快速排序基本思想

    第一步:找一个基准值(这里选取待排序数组中最左边的值)然后将待排序数组分成三个部分
    第一部分:数据全小于基准值
    第二部分:数据全等于基准值
    第三部分:数据全大于基准值
    第二步:将第一部分和第三部分分别进行第一步处理,直到i>=j

    快速排序的代码

    pair<int,int> quickHolandFlag(int a[],int l,int r)
    {
    	int i =l-1,j=r+1,index =l;
    	int tmp = a[index];
    	while(index<j)
    	{
    		if(a[index]<tmp) swap(a[index++],arr[++i]);
    		else if(a[index] == tmp) index++;
    		else swap(a[index],a[--j]);
    	}
    	return make_pair(i,j);
    }
    //递归写法
    void quickSortRecur(int a[],int l ,int r)
    {
    	if(l>=r) return;
    	pair<int,int> p = quickHolandFlag(a,l,r);
    	quickSortRecur(a,l,p.first);
    	qucikSortRecur(a,p.second,r);
    }
    //非递归写法  非递归用栈来实现
    void quickSort(int a[],int n)
    {
    	stack<pair<int,int>> stk;
    	stk.push(make_pair(0,n-1));
    	while(!stk.empty())
    	{
    		pair<int,int> p = stk.top();
    		stk.pop();
    		pair<int,int> part = quickHolandFlag(a,p.first,p.second);
    		if(p.first < part.first)
    		{
    			stk.push(make_pair(p.first,part.first));
    		}
    		if(part.second < p.second)
    		{
    			stk.push(make_pair(part.second,p.second));
    		}
    	}
    }
    
    展开全文
  • 什么是数据结构 数据结构是组成数据的数据元素的关系的学科。 通过数据元素的关系,帮助我们更好的组件数据模型,让数据在内存中的操作更加流畅 高效。 数据元素有三种关系:逻辑关系->存储关系->运算关系。...
    • 什么是数据结构

    数据结构是组成数据的数据元素的关系的学科。

    通过数据元素的关系,帮助我们更好的组件数据模型,让数据在内存中的操作更加流畅 高效。

    数据元素有三种关系:逻辑关系->存储关系->运算关系。

    • 数据的基本概念

    数据

    数据就是能被计算识别并且存储和处理的符号总称。

    数据元素

    数据元素是数据的基本单位,又称为记录(Record)。

    数据项

    数据项构建了数据元素,数据项是数据的最小单位。

    数据类型

    数据类型是对数据元素取值范围与运算鉴定。

    • 数据结构(DS)

    D代表数据,S代表结构,DS是一个二元组。

    其中,D为数据元素的集合,R为D上关系的集合。

    例子:向量v=(1,3,5,7,9) 对应的D,R为:

    D = {2I+1|Iε整数,i=0,1,2,3,4}

    R={<1,3>,<3,5>,<5,7>,<7,9>}

     

    • 数据之间的相互关系

    包括三种关系:

    1. 逻辑结构

    表示数据元素之间的抽象关系,它具有4种基本的逻辑结构:集合结构、线性结构、 树形结构、图状结构。

    图状结构如下:

     

    A(跳高)、B(跳远)C(标枪)

         2.存储结构

    数据存储结构在计算机内的存储形式。

    分为顺序存储结构、链接存储结构、索引存储结构、散列存储结构。

        3.数据运算

    数据的运算主要是对数据的曾删改查排序等。

    第一节总结

    展开全文
  • 本书使用Python 和C++两种编程语言来介绍数据结构。全书内容共15 章。书中首先介绍了抽象与分析、数据的抽象等数据结构的基本原理和知识,然后结合Python 的特点介绍了容器类、链式结构和迭代器、堆栈和队列、递归、...
  • C++ 数据结构——BF算法

    千次阅读 2021-04-02 08:55:10
    BF算法 */ #include <iostream> #include <string> using namespace std; int main() { string s1,s2; cin>>s1>>s2; int i=0,j=0,start=0; while (s1[i]!='\0'&&s2[j]!='\0')...
  • 数据结构算法与应用-c语言描述(清晰版)下载第一部分 预 备 知 识第1章 C + +程序设计大家好!现在我们将要开始一个穿越“数据结构、算法和程序”这个抽象世界的特殊旅程,以解决现实生活中的许多难题。在程序开发...
  • 数据结构算法与应用——C++语言描述英文.pdf[General Information]书名=数据结构算法与应用——C++语言描述:英文作者=页数=824SS号出版日期=封面页书名页版权页前言页目录页PARTⅠ PRELIMINARIESChapter 1 ...
  • 最短路径算法
  • 文章目录数据结构数据逻辑结构集合线性结构树形结构图状结构数据物理结构顺序链式索引散列(hash)哈希函数直接寻址法数字分析法平方取中法取...性确定性可行性效率度量事前分析事后分析大O表示法算法数据结构联系...
  • 理解最小生成树的定义 生成树:连通图的生成树是包含全部顶点的一个极小连通子图 ...Prim算法:从某一个顶点开始构建生成树,每次将代价最小的新顶点纳入生成树,直到所有的顶点都纳入为止。 ...
  • 第一章 编写一个程序解决选择问题,令k=N/2.得到所编程序对于N的不同值的运行时间 (语法方面很多不熟悉,所以做了相关的笔记注释) ...//为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <
  • 本文章适用于以下人群: 已经初步理解了Prim相关概念和思路,但是缺少相关代码和使用的实例,以及不清楚代码的相应内容的原理的作用的人,本文的详细注释的代码以及测试的数据都放在了代码行里面,可自行取用。...
  • 数据、数据元素、数据结构、数据类型的含义分别是什么?数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。数据元素:数据的基本单位,在计算机程序中通常作为一...
  • 这个系列的专栏记载了本书的一些课后习题的答案(编程题目,画图题及问答题不涉及) 第一章 点击查看 第二章 点击查看 第五章 点击查看 第六章 点击查看
  • 本教程将使您对理解企业级应用程序的复杂性以及算法数据结构的需求所需的数据结构有很好的了解。 第1章 当我们谈论算法的时候,我们在谈论什么? 无论是BAT,还是FLAG,但凡有点儿水平的技术公司,面试都要面...
  • 南开大学数据结构算法 习题与答案第1章 概 论1.数据、数据元素、数据结构、数据类型的含义分别是什么?数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。数据...
  • C++中常用的数据结构

    千次阅读 2021-01-25 23:14:51
    一直以来虽然写的都是C++的代码但是基本上用的都是C的数据结构。这次实现一个相对大型的C++项目,发现了很多很有用的数据结构,通过使用这些数据结构,可以极大程度的提高开发效率。所以计划逐渐整理下C++数据结构...
  • 数据结构算法与应用 C++语言描述 第一章课后习题 Q12 #include <iostream> using namespace std; template <class T> void make2dArray(T ** &x, int numberOfrows, int *rowSize) { // 先将x...
  • 文章目录数据结构C++——最短路径之Dijkstra算法和Floyd算法一、最短路径之Dijkstra算法①Dijkstra算法的实现原理②Dijkstra算法的代码实现③测试的完整代码二、最短路径之Floyd算法①Floyd算法的实现原理②Floyd...
  • C++数据结构算法 一、二叉树的概念 二叉树是一个元素集合,其中每个元素最多只有一个前驱、两个后继。 没有前驱的元素称为根,如图的1节点。没有后继的元素是叶子或者终端。除了以上两种情况外,其余称为分支元素...
  • C++,java算法数据结构任何时候学习算法都不晚,而且越早越好,这么多年,你听说过技术过时,什么时候听说过算法过时,不仅没有过时,因为机器学习、大数据的要求,算法变得越来越重要了20170908091104.jpg (25.15...
  • // queue.h // // Created by Dell on 2021/4/26. // #ifndef DATASTRUCTURES_QUEUE_H #define DATASTRUCTURES_QUEUE_H template<class T> class queue { public: virtual ~queue(); ...
  • 1.2 函数与参数 void swap(int &x, int &y){ int temp = x; x = y; y = temp; } 将原来的值传参改为引用传参即可。 template<class Ta, class Tb> int count(Ta a, Tb value){ ... retu
  • 实验十一 图的应用 一、实验目的 (1)掌握图的最小生成树的两种构造方法:普里姆(Prim)...1.请分别用普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法画出如下无向带权图的最小生成树的构造过程:(其中普里姆算法初始时选
  • 文章目录一、实验题目二、需求分析三、概要设计四、调试分析五、使用说明六、测试结果七、其他数据结构实例 一、实验题目 常用的排序算法有冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序等。接...
  • 学了两天的KMP算法,总算有了自己的一点理解,写在这里做个记录了,也与各位大神交流,期待大神的指正! AC代码: #include <iostream> #include <cstring> using namespace std; #define MaxSize ...
  • 建议初学数据结构的同学直接使用C,绝不建议使用Java。C能让你进一步了解底层的代码的实现和算法思想,Java封装太深,让人很容易忽略底层代码(底层代码不容易看到)。对于算法我建议使用C++或是Java,算法侧重思想和...
  • 使用Python和C++的写数据结构算法1.数据结构算法简介2.数据结构2.1 堆栈2.2 队列2.3 散列表2.4 二叉树2.5 线性搜索2.6 二进制搜索2.7 递归2.8 递归二进制搜索2.9 QuickSort2.10 Fizzzbuzz算法2.11 计数排序2.12 ...
  • 十本数据结构算法书籍推荐

    千次阅读 2021-05-20 22:57:29
    在这里列出一些我看过或者准备看的算法书籍,以供参考。 第一名 原书名:The Art of Computer Programming 中文名:计算机程序设计艺术 作者:Donald E.Knuth 难度:★★★★★ 个人评价:★★★★★ 推荐...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,069
精华内容 106,427
关键字:

c++数据结构算法

c++ 订阅
数据结构 订阅