一程序概念:
1.对身边的任何一个事物进行认知和分类,从而得到一些信息;
2.在得到的信息基础之上建立了概念模型;
3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式;
4.用户通过人机交互,从而解决实际生活中出现的问题!
二.数据结构:
就是用来反映一个概念模型的内部组成!也就是概念模型由那些具体的数据构成的!
三.线性结构:
1.数组:存储一系列相同类型的数据集合!在内存总会开辟一块连续的内存空间!
2.链表 : 单链表 双向链表 循环链表
//单链表
public class MyNode {
private int data; // 元素ABC的值
private MyNode next; // 下一个元素 public MyNode(int d){
data=d; //把用户传递来的值 给我们节点的元素
}
//用户传递来的下一个节点
private void append(MyNode myNode) {
MyNode node=this;
while(node.next!=null){
node=node.next;
}
node.next=myNode; //把传递过来的对象作为当前节点的下一个
} //要增加的节点
private void add(MyNode myNode) {
myNode.next=next;//把当前的null 给了传递过来节点的next属性
next=myNode;
} //显示链表中所有的节点
private void show() {
MyNode node=this;
while (node!=null){
System.out.println(node.data);
node= node.next;
}
} public static void main(String[] args) {
//创建我们自己的链表
MyNode node=new MyNode(10);
node.append(new MyNode(30));
node.append(new MyNode(40));
node.add(new MyNode(20));
node.show();
}
}
3.分叉关系:
01.图
02.树
03.二叉树
根节点 中间节点 叶子节点 左子树 右子树
根节点没有父节点!
中间节点有父节点也有子节点!
叶子节点没有子节点,但是有父节点!
4.遍历二叉树的两种方式:
01.前序遍历===》先根遍历===》 根=》左=》右
02.中序遍历===》 左=》根=》右
//二叉排序树
public class MyTree {
private int data; //树上的数据
private MyTree left; //左边
private MyTree right; //右边 public MyTree(int data){
this.data=data;
} //新增的树节点
private void add(MyTree myTree) {
if (myTree.data<this.data){
if (left==null){ //务必判断 否则数据会覆盖
left=myTree;
}else {
left.add(myTree);
}
}else{
if (right==null){ //务必判断 否则数据会覆盖
right=myTree;
}else {
right.add(myTree);
}
}
} //显示树上所有的数据
private void show() {
if (left!=null) left.show();
System.out.println(data); //中序
if (right!=null) right.sho
//二叉排序树
public class TreeDemo {
//创建集合保存所有节点
static List<Node> list=new ArrayList<>(); class Node{ //节点
String data; //值
String parent; //父节点的值
} //parent是父节点的值,child是子节点的值
private void add(String parent, String child) {
Node node=new Node();
node.data=child;
node.parent=parent;
list.add(node); //把数据放进集合
} //根据子节点查询对应的父节点
private static void showParent(String child) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).data.equals(child)){
System.out.println(list.get(i).parent);
}
}
}
//根据父节点查询对应的子节点
private static List<String> showChildren(String parent) {
List<String> children=new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).parent.equals(parent)){
children.add(list.get(i).data);
}
}
return children;
} public static void main(String[] args) {
TreeDemo tree=new TreeDemo(); //创建一个空树
tree.add("学校","一年级");
tree.add("学校","二年级");
tree.add("学校","三年级");
tree.add("一年级","一年级1班");
tree.add("一年级","一年级2班");
tree.add("一年级","一年级3班");
tree.add("二年级","二年级1班");
tree.add("二年级","二年级2班");
tree.add("三年级","三年级1班"); //根据子节点查询对应的父节点
// showParent("二年级1班");
//根据父节点查询对应的子节点
showChildren("学校"); }
} public static void main(String[] args) { //创建一个树的根节点
MyTree tree=new MyTree(50);
tree.add(new MyTree(45));
tree.add(new MyTree(49));
tree.add(new MyTree(82));
tree.add(new MyTree(75));
tree.add(new MyTree(46));
tree.add(new MyTree(99));
tree.show();
}
}
程序------>数据结构的更多相关文章
-
初转java随感(一)程序=数据结构+算法
大学刚学编程的时候,有一句很经典的话程序=数据结构+算法 今天有了进一步认识. 场景: 1.当前局面 (1)有现成的封装好的分页组件 返回结果是page.类型为:Page.包括 page 分页信息,d ...
-
Spark程序数据结构优化
场景: 1.scala中的对象:对象头是16个字节(包含指向对象的指针等源数据信息),如果对象中只有一个int的属性,则会占用20个字节,也就是说对象的源数据占用了大部分的空间,所以在封装数据的时候尽 ...
-
(IOS)BaiduFM 程序分析
本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源app BaiduFM的研究心得. 项目地址:https://github.com/belm/BaiduFM-Swift 一.项 ...
-
MySQL索引背后的数据结构及算法原理 --转
写在前面的话 在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重 ...
-
WinDbg 调试.net程序
WinDbg支持以下三种类型的命令: · 常规命令,用来调试进程 · 点命令,用来控制调试器 · 扩展命令,可以添加叫WinDbg的自定义命令,一般由扩展dl ...
-
java程序练习:猜字母
猜字母程序=数据结构+算法 首先:定义数据结构1.找名词Input:输入变量Output:输出变量隐含:找到隐含的变量,如字符串 其次:定义算法,程序的处理 最后:按照顺序,逐步实现 注意:1.基本数 ...
-
MySQL源码:索引相关的数据结构
http://www.orczhou.com/index.php/2012/11/mysql-source-code-data-structure-about-index/ 本文将尝试介绍MySQL索 ...
-
数据结构 Python实现
参考博客:浅谈算法和数据结构: 一 栈和队列 Python数据结构--栈.队列的实现(一) Python数据结构--栈.队列的实现(二) Python数据结构--链表的实现 数据结构 ...
-
数据结构(java版)学习笔记(序章)
程序=数据结构+算法 序章做一个简单的思维导图,方便理解数据结构这门课的大纲,接下来我们将是按照线性表,栈,队列,串,树和图的顺序依次往下学.
随机推荐
-
Mac环境下Octopress个人博客搭建
一直想弄一个漂亮一点的个人博客,之前一直用的博客园,对主页的能自定义内容实在不满意,终于下定决定,找到了Octopress这个适合我的解决方案,以下过程都是自己一步一步记录下来的,希望对大家有帮助. ...
-
【转】acm小技巧
1.一般用c语言节约空间,要用c++库函数或STL时才用c++: cout.cin和printf.scanf最好不要混用. 大数据输入输出最后不用cin.cout,纺织超市. 2.有时候int型不够用 ...
-
NHibernate可视化设计插件——Mindscape.NHibernateModelDesigner
我一直希望NHibernate能够支持像EF一样支持可视化操作,今天去网上搜了一下,发现有一个插件,类似EF的可视化功能. 下载地址:Mindscape.NHibernateModelDesigner ...
-
Mysql数据库int(1)和tinyint(1)的区别&;&;扩展阅读
转自:http://blog.csdn.net/phpwish/article/details/7845921 今天看项目的数据库结构设计,发现一个奇怪的地方. `xxx_detail` `del ...
-
jQuery中的插件的编写和使用
1,常用的jQuery插件:表单验证插件formValidator a.目前支持5大验证方式:1.inputValidator(针对input,textarea,select控件的字符长度,值范围,选 ...
-
ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更
本篇讲解菜单.绘图.还有大小变更控件.菜单控件可以附加到各种其他控件中,比如按钮.工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单):ext对绘图的支持可以让我们通过js来绘图:大小变更控件可以让 ...
-
IOS开发笔记 - 基于SDWebImage的网络图片加载处理
前言: 在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...
-
linux学习(一)认识、安装Linux
一.什么是Linux linux是一种操作系统,我们用的android和ios就是分别是linux操作系统和类unix操作系统. linux也是我们经常说的服务器.我们看的网站,游戏,app背后都是服 ...
-
React-native搭建移动端ios开发环境实践笔记
开发环境的搭建,按照 https://reactnative.cn/docs/getting-started/ 里面的步骤一步一步来,这里记录下需要注意的几点:1.初始化react-native项目的 ...
-
前端整理——css部分
(1)盒模型(普通盒模型.怪异盒模型) 1.元素的content(内容).padding(内边距).border(边框).margin(外边距)构成了CSS盒模型 2.IE盒模型和W3C盒模型 1)I ...