数据结构与算法复习

数据结构回顾与整理

复习资料《数据结构与算法 Javascript描述》 人民邮电出版社

数据结构与算法学的次数再多也不为过。

1,数组array:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,来计算元素之间存储位置的偏移量。 除了常用的方法,ES5中新增加了几个迭代方法,forEach(),every()some(),reduce(),map(),filter().

2.列表list:是一组有序数据。其中的数据项被称为 元素。包含属性/方法有listsize,pos(当前位置),length,clear(),toString(),getElement()获取当前位置的元素,insert(),append(),remove(),front(),end(),prev()前移一位,next(),cuurPos()返回列表当前位置,moveTo()移动到当前位置。 特点:其中数据存储的顺序不重要,且不能对数据进行查找。这些栈可以实现。

3.栈stack:是一种特殊的列表,只能通过栈顶添加或删除元素,属于后入先出(LIFO last in first out)的数据结构,类似于饭店里的一摞盘子,栈通常使用的两种方法push()入栈,pop()出栈,还有peek()用于返回栈顶元素,同时还应有一个top属性用来表示要插入的元素的存储位置。 应用:数制间的相互转换(把余数存入栈中,存储完毕后,通过pop()返回栈顶元素并删除,直至取完所有元素),判断字符串是否是回文(把字符串推入栈,然后pop(),再判断是否相同),模拟递归(比如阶乘问题,把一个数通过循环逐次减小并推入栈中,后pop()取出并相乘)。

4.队列queue:也属于一种列表,队列只能在队尾插入元素,队首删除元素,类似于排队。队列是一种先入先出(FIFO)的数据结构,常用的方法是入队push(),出队shift(),可以用来实现基数排序(先按照个位数来排序 ,然后按照十位数排序)

5.链表linkedlist:链表由一组节点组成,每个节点使用一个对象的引用指向它的后继,这个引用即为链。向连表中加入新节点,需要修改它前面的节点,使其指向自己,然后自己指向前面节点原来指向的节点,删除节点,只需要使前面的节点直接指向被删除节点后面的节点即可。

6.字典dictionary:以键-值形式存储数据的数据结构。

7.散列表 hashtable:散列表中数组的长度是预先设定的,所有元素根据该元素对应的键保存在数组的特定位置。这个键被映射为数字,数字的范围是0-散列表的长度。散列表中的数组的长度应该是一个质数。在散列表上插入删除和取用数组都非常快,但是查找数据很慢,比如查最大最小值。处理碰撞是重点。

8.集合set:是一组无序但是彼此之间又有一定相关性的成员构成,每个成员在结构中只出现一次。对集合的操作有并集,交集和补集。

9.二叉树:树是一种非线性的数据结构,已分层的方式存储数据。二叉树是一种特殊的树,它的子节点数不会超过两个。二叉查找树(BST)又是一种特殊的二叉树,相对较小的值保存在左节点,这使得查找的效率高。遍历有三种方式:先序,中序和后序。中序使用递归的方式实现,先访问左字树,在访问根节点,然后是右子树。先序是先访问根节点,然后同样的方式访问左子树和右子树。后序是先遍历访问子节点,从左字树到右子树,再到根节点。

10.图Graph:这个真的有点难度。。学好以后在整理。

时间: 2024-09-30 06:34:03

数据结构与算法复习的相关文章

数据结构与算法复习(一) 排序算法(I)

这篇文章将会介绍最常见的排序算法(使用 JavaScript 语言实现) PS:这里我会尽量使用语言无关的语法去写,大家不要太在意语言,重要的是算法的实现思路 1.冒泡排序 将数组分为有序区(左边)和无序区(右边) 每次从无序区的最后一个元素开始,一直向前冒泡到无序区的第一个位置,使其变成有序 function swap(A, i, j) { if (i === j) return [A[i], A[j]] = [A[j], A[i]] } function bubbleSort(A) { fo

数据结构与算法复习第一天——基础概念,线性表

数据结构的一些基本术语: 数据:客观事物的符号表示 数据元素:数据集合中的一个个体 数据项 组成数据元素 数据对象是数据的子集 由相同性质的数据元素构成 数据结构:带有结构的数据元素的集合 数据结构可以用一个四元组表示(D,L,S,O) data ,logical structrue ,storage struction operation操作 L——集合,线性,树形,图形 S——存储结构,有顺序,链式,散列 线性表——线性结构,数据元素之间一对一的关系, N个具有相同类型的数据元素的有限序列

数据结构与算法复习-----leetcodeOJ题解

Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be replaced with another character while preserving the or

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

【数据结构与算法】一、三元组的代码实现

开始复习数据结构和算法,好长时间没写c了,顺便复习一下 三元组的表示与实现 #include<iostream> #include <stdlib.h> using namespace std; //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //函数结果类型 typedef int Status; //数

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

数据结构与算法知识点

<转> 一.数据结构部分 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,它采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪

Java 数据结构与算法分析学习

由于之前面试android的时候考到了很多关于java的知识,所以这次重温数据结构知识就打算用java来学习,毕竟android是以java为基础的,而且我现在学习的j2ee架构也是以java为基础的. java中的类就是对现实世界的对象的一种抽象,例如人就是一个类别,人有名字,联系电话,住址等成员属性,人拥有说话,吃饭,走路等成员方法.类就是这样,定义了一种对象,它有什么,会做什么. 继承——子类就是父类的一种特定类别.例如学生就是人的子类,学生属于人,是特定的一类人.所以我们让学生继承人,这

四 数据结构与算法总结(一)

转载:http://blog.csdn.net/jie1991liu/article/details/8167194 一.数据结构部分 1.数组和链表的区别: C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中 ,用户使用数组之 前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费 .链表是一种常见的数据组织形式,它 采用动态分配内存的形式实现.需要时可以用ne