![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
--------【数据结构与算法】
奔跑吧,行者
这个作者很懒,什么都没留下…
展开
-
数据结构与算法-----总结篇
一、数据结构程序设计=数据结构+算法1.逻辑结构1)集合:元素之间没有联系。2)线性结构:元素之间存在前后顺序。3)树形结构:元素之间存在一对多的父子关系。4)图状结构:元素之间存在多对多的映射关系。2.物理结构1)顺序结构:用连续的空间存放数据元素。优点:便于随机访问。缺点:空间利用率低,插入删除不方便。2)链式结构:用不连续的空间存放数据元素,每原创 2015-06-17 17:09:30 · 3809 阅读 · 1 评论 -
des,d2des,d3des的区别
三重DES 因为确定一种新的加密法是否真的安全是极为困难的,而且DES的唯一密码学缺点,就是密钥长度相对比较短,所以人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,其算法的步骤如图5.9所示: 1. 用密钥K1进行DEA加密。 2. 用K2对步骤1的结果进行DES解密。原创 2016-02-17 17:27:45 · 3864 阅读 · 0 评论 -
原码, 反码, 补码 详解以及负数的按位与运算
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符原创 2015-08-20 11:06:09 · 10636 阅读 · 0 评论 -
C语言-----循环双向链表(增加文件读写链表功能)
双向链表其实是单链表的改进。当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结原创 2015-11-25 17:39:13 · 4641 阅读 · 1 评论 -
数据结构与算法-----双向线性链表
链表 1.基本特征:由一系列内存中不连续的节点组成,每个节点除了保存数据以外,还需要保存其前后节点的地址——双向链表。 2.基本操作 1)追加 2)插入 3)删除 4)遍历 5)伪随机访问 示例:使用C++实现双向链表类,并演示结果;#include <iostream>using namespace std;class List {public: // 构造函数中初始原创 2015-06-18 17:35:42 · 1178 阅读 · 0 评论 -
数据结构与算法-----单向线性链表(逆转和反向打印)
单向链表没有前指针,所以实现反向打印还是比较麻烦,我们这里使用递归原理解决此问题。 这里提到逆转,也就是将单链表的next指针指向前一个节点,我们也使用递归实现。// 练习:实现单向线性链表的建立、测长、正向打印和// 反向打印// 逆转#include <iostream>using namespace std;class List {public: // 构造函数中初始化为原创 2015-12-01 17:05:43 · 3914 阅读 · 0 评论 -
数据结构与算法-----堆栈-使用链表(链式结构)实现
使用链表实现堆栈,不需要考虑容量问题,所以只需要注意链表是否为空#include<iostream>#include<fstream>using namespace std;class Stack{public: Stack(void):top(NULL){} ~Stack(void){ for(Node *p;top;top=p){原创 2015-12-01 16:58:16 · 781 阅读 · 0 评论 -
数据结构与算法-----队列-使用链表(链式结构)实现
数据结构:队列结构特点1.基本特征:先进先出2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop)3.实现要点:初始化空间、从后端指针压入,从前端指针弹出,判空(链表结构只需要判空,不考虑容量不足情况)下面使用链表实现队列结构,那么成员变量就是front和rear两个节点结构的指针变量,front指向前端,rear指向后端#include u原创 2015-11-30 17:51:56 · 1478 阅读 · 0 评论 -
数据结构与算法-----搜索和排序(C语言库函数的使用)
qsort(利用快速排序法排列数组) 表头文件 #include#include<stdio.h>#include<stdlib.h>#include<string.h>int cmpInt(const void *a,const void *b){ return *(const int*)a - *(const int*)b;}int cmpStr(const void *a原创 2015-12-04 16:44:32 · 1556 阅读 · 0 评论 -
C语言位运算符:与、或、异或、取反、左移和右移
C语言位运算符:与、或、异或、取反、左移和右移语言位运算符:与、或、异或、取反、左移和右移位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则转载 2015-06-04 10:57:07 · 678 阅读 · 0 评论 -
数据结构与算法------二分查找
二分查找 1.算法:假设数据按升序排列,取中间位置值,如果目标等于中值,则查找成功;如果目标小于中值,则在中值左侧继续查找;如果目标大于中值,则在中值右侧继续查找;直到找到或者找不到为止。 2.评价:O(logN),数据必须有序。#include<iostream>#include<cstdlib>using namespace std;int bfind(int *data,int si原创 2015-12-08 16:02:13 · 623 阅读 · 0 评论 -
数据结构与算法------线性查找
线性查找 1.算法:逐个比较,找到为止。 2.评价:O(N),对数据的有序性没有要求。#include<iostream>#include<cstdlib>using namespace std;int lfind(int *data,int size,int value){//线性查找->返回元素下标 for(int i=0;i<size;++i) if(data原创 2015-12-08 14:47:54 · 855 阅读 · 0 评论 -
数据结构与算法-----堆栈-使用数组(顺序结构)实现
堆栈1.基本特征:后进先出 2.基本操作:压入(push),弹出(pop) 3.实现要点:初始化空间、栈顶指针、判空判满 实践:使用C++语言实现堆栈类,进行示例演示并且根据此堆栈类实现进制的转换。“`include using namespace std; class Stack { public: // 构造函数中分配内存空间 Stack (size_t size原创 2015-06-17 17:40:27 · 2139 阅读 · 0 评论 -
C语言-----循环单链表
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{ char name[32]; struct node *next; }no;unsigned int len=sizeof(no);no* CreatList(unsigned int num){ int i;原创 2015-11-24 13:22:20 · 792 阅读 · 0 评论 -
数据结构与算法-----冒泡排序
冒泡排序 1)算法 A.比较相邻的元素,如果第一个比第二个大就交换它们; B.对每一对相邻的元素都做同样的工作,从开始的第一对到结尾的最后一对。经过这一步,最后的元素是最大值; C.针对所有的元素重复以上步骤,除了最后一个; D.持续每次对越来越少的元素重复以上步骤,直到没有元素需要交换。 2)评价 平均时间复杂度O(N^2),稳定,对数据的有序性敏感。实现要点: 1 .如果有10个原创 2015-12-02 16:10:21 · 3663 阅读 · 0 评论 -
数据结构与算法-----队列-使用数组(顺序结构)实现
队列1.基本特征:先进先出 2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop) 3.实现要点:初始化空间、从后端指针压入,从前端指针弹出, 循环使用,判空判满实践1:使用C++语言实现队列类并进行数据示例演示#include <iostream>using namespace std;原创 2015-06-18 14:40:37 · 962 阅读 · 0 评论 -
C语言-----线性单链表
所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。 链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。 所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分: 1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。struct stu{ char name[32];原创 2015-11-21 22:48:40 · 2307 阅读 · 0 评论 -
数据结构与算法-----选择排序
选择排序 12 13 15 23 20 31 19 26 24 1)算法 首先在未排序序列中找到最小元素,并于该序列的首元素做交换,再从剩余的未排序序列中继续寻找最小元素重复以上过程,直到未排序序列中仅剩一个元素为止。 2)评价 平均时间复杂度O(N^2),稳定,对数据的有序性不敏感。相对冒泡而言,因为交换的次数少,略优于冒泡。实现要点: 1 由于不知道最小值,那么假设一个值是最小值,那原创 2015-12-03 10:04:20 · 473 阅读 · 0 评论 -
数据结构与算法-----快速排序
快速排序 1)算法 A.从序列中找出一个元素作为基准; B.从新组织序列,所有小于基准的元素都位于基准的左侧,所有大于基准的元素都位于基准的右侧,与基准相等的元素可位于基准的任一侧; C.以递归的方式分别对左右两个分组进行排序。 2)评价 平均时间复杂度O(NlogN),不稳定。理论上如果每次都能做到均匀分组,会得到的最快的排序速度。实现要点: 利用左、右边界,准确定位,比较与基准点的原创 2015-12-04 13:20:27 · 533 阅读 · 0 评论 -
数据结构与算法-----归并排序
归并排序(递归合并) 平均时间复杂度O(2NlogN),稳定,对数据有序性不敏感,非就地排序,不适用于对海量数据进行排序。void remoteMerge(int *arr1,int size1,int *arr2,int size2,int *arr3) 此函数属于异地合并,arr1和arr2已经是排好的数据,size1和size2是数组的元素个数,arr3是排序合并的结果数组。 void原创 2015-12-08 13:05:30 · 688 阅读 · 0 评论 -
struct和union计算方法
规则:1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍;2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍;同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的转载 2015-06-04 10:54:20 · 1077 阅读 · 0 评论