验证中...
7.21 杭州源创会火热报名中,一起来看看移动开发如何紧跟浪潮?
语言: Java
分类: 其他
最后更新于 2018-04-19 23:03
片段 1 片段 2 片段 3 片段 4 片段 5
gistfile1.txt
原始数据 复制代码
/**
* 数据结构:
* 是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
* 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
* 数据结构分为数据逻辑结构和数据存储结构。
* 数据元素是数据的最基本单位,也是数据结构存储的最基本单位。
* 组成数据的最小单位是数据项,数据元素是由多个数据项组成的。
* eg:78个学生,每个学生就是数据元素,学生的属性是数据项。年龄、姓名是数据项,一个学生是数据元素。
*
* 数据的逻辑结构
* 指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。
* 逻辑结构分4种:集合结构、线性结构(把学生按学号排序,像线一样穿一串)、树结结构(部门和部门之间的,父子之间的关系)、图结结构。
*
* 数据的存储结构
* 指数据的逻辑结构在计算机存储空间(内存)的存放形式。
* 是数据结构在计算机中的表示(又称映像)。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
*
* 存储结构分为2种:顺序存储(就是往数组里面存,在插入和删除的时候,位置往前或往后移,速度比较慢,查找快)、链式存储(查找慢,时间复杂度是O(n),再删除和插入的时候快,面向常用这个方法)、索引存储、散列存储(也叫哈希存储。具体过程hash算法,最优点:快。时间复杂度仅为O(1))
* 哈希冲突:两个元素经过哈希运算之后再哈希表中具有相同的位置,就会引起哈希冲突。
* 使用拉链法来解决冲突问题。
* 常见的数据结构:
* 1.散列表
* 2.线性表:数组【静态数组、动态数组】、链表
* 3.二叉树:大的放右边
* 二叉树的遍历:先序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)
* 二叉树的深度为k时:总结点数是(2^k)-1
* 深度是k的二叉树,叶子结点数量是2^(k-1)
* 完全二叉树
* 满二叉树
* 二叉搜索树
* 4.特殊线性表:
* 1.队列:【队列、双端队列】‘先进先出’
* 2.栈Stack:‘先进后出’
* 数据结构编写(队列和栈,以及二叉树)
*
*/
public class Text {
}
//数据结构编写(队列和栈,以及二叉树)
//队列
class Queue{
Object [] Data=new Object[10];
private int i;
//进入
public void add(Object data){
if(){
}
Data[i]=data;
i++;
}
//删除
public Object remove(){
int l=0;
Data[i]=null;
return null;
}
//大小
public int size(){
return i;
}
}
链表
原始数据 复制代码
/**
* 数据结构
* 计算机组织和存储数据的方式,分为逻辑存储结构和物理存储结构
* 逻辑存储结构分为四种: 集合 线性 树 图
* 物理存储结构分为: 顺序存储(数组) 和 链式存储(链表)
*
* 什么是链表?
* 链表分为 单向链表 双向链表 和 循环链表
* 链表需要自己去编写,java里没有。
* 递归算法:类似一种for循环,在方法的内部调用自己的过程
* 特征:1.自己调用自己,形成无限循环(后果就是栈溢出)。
* 2.必须有终止条件。
* 循环和递归都是遍历数据的作用,两者相比,递归的逻辑性强一些,代码简洁一些,递归的缺点:在某些情况下,递归非常影响性能。
* 递归的应用场景,树(链表)的遍历,例如:组织机构,帖子评论,磁盘目录
* 算法是解决问题的有限序列。
* 如何判定算法的优劣?
* 时间复杂度 和 空间复杂度 ,采用大O表示。
* 时间复杂度:O(1)表示最有效率的, O(n)呈线性增长的,O(log(n)),O(nlog(n))
* 用空间换时间,换取更高的效率
*
*/
public class Text {
public static void main(String[] args) {
Stacker s=new Stacker();
s.add("A");
s.add("B");
s.add("C");
s.add("D");
s.print();
String s2="";
String s3=null;
}
}
/**
*
* 栈(采用链式存储)
*
*/
//编写一个链表
class Stacker{
//链表
Element first;//第一个元素
int size;
/**
*
* 输出
*/
public void print(){
print(first);
}
private void print(Element e){
if(e!=null){
System.out.println(e.data.toString());
print(e.next);
}
}
/**
* 添加一个元素
*
*/
public void add(Object data){
size++;
if(first==null){
first=new Element(data);
}else{
add(first,data);
}
}
/**
* 内部方法(向指定的元素放入下一个元素)
*/
public void add(Element e,Object data){
if(e.next==null){
e.next=new Element(data);
}else{
add(e.next,data);//递归 1.自身调用自身 2.终止递归条件
}
}
}
//数据元素
class Element{
Object data;//元素内部的数据
//下一个元素的地址
Element next;
public Element(Object data){
this.data=data;
}
}
作业
原始数据 复制代码
import java.util.Scanner;
/**
*
* 阶乘
*
*/
public class Text1 {
public static long jiecheng(int n){
if(n==0){
return 1;
}
if(n==1){
return 1;
}
return n*jiecheng(n-1);
}
public static void main(String[] args) {
Scanner Input=new Scanner(System.in);
System.out.println("请输入您要阶乘的数字: ");
int i=Input.nextInt();
long s=Text1.jiecheng(i);
System.out.println(i+" 的阶乘为: "+s);
}
}
二分查找又称折半查找
原始数据 复制代码
/**
* 二分查找又称折半查找
*
*
*/
public class Text {
public static void main(String[] args) {
double [] list={10,20,30,40,50,60,70,80,90};
int index=BinarySearch.search(list, 20, 0, list.length-1);
System.out.println(index);
}
}
//递归版
class BinarySearch{
/**
* 二分查找
* @return
*/
public static int search(double [] list,double value,int low,int height){
//折半
int middle=(low+height)>>1;//低位+高位除以2(向右移动1位,相当于除以2)
//判断边界
if((value<list[low]||value>list[height])||(value>list[low]||value<list[height])){
return -1;//-1是计算机中一个特殊的数字,用来表示"找不到"
}
if(list[middle]==value){
return middle;
}else if(list[middle]>value){
//低位置不变 高位置=middle-1
return search(list,value,low,middle-1);
}else{
return search(list,value,middle+1,height);
}
}
}
集合构架

评论列表( 0 )

你可以在登录后,发表评论

11_float_left_people 11_float_left_close