数据结构与算法01 之数组
来源:互联网 发布:淘宝买虚拟物品被关闭 编辑:程序博客网 时间:2024/05/18 01:03
数组是应用最广泛的数据存储结构。它被植入到大部分的编程语言中,由于数组十分易懂,所以在这里就不赘述,主要附上两端代码,一个是普通的数组(无序数组),另一个是有序数组。有序数组是按关键字升序(或降序)排列的,这种排列使快速查找数据项成为可能,即可以使用二分查找。
普通数组的java代码:
- public class GeneralArray {
- private int[] a;
- private int size; //数组的大小
- private int nElem; //数组中有多少项
- public GeneralArray(int max) { //初始化数组
- this.a = new int[max];
- this.size = max;
- this.nElem = 0;
- }
- public boolean find(int searchNum) { //查找某个值
- int j;
- for(j = 0; j < nElem; j++){
- if(a[j] == searchNum)
- break;
- }
- if(j == nElem)
- return false;
- else
- return true;
- }
- public boolean insert(int value) { //插入某个值
- if(nElem == size){
- System.out.println("数组已满!");
- return false;
- }
- a[nElem] = value;
- nElem++;
- return true;
- }
- public boolean delete(int value) {//删除某个值
- int j;
- for(j = 0; j < nElem; j++) {
- if(a[j] == value) {
- break;
- }
- }
- if(j == nElem)
- return false;
- if(nElem == size) {
- for(int k = j; k < nElem - 1; k++) {
- a[k] = a[k+1];
- }
- }
- else {
- for(int k = j; k < nElem; k++) {
- a[k] = a[k+1];
- }
- }
- nElem--;
- return true;
- }
- public void display() { //打印整个数组
- for(int i = 0; i < nElem; i++) {
- System.out.print(a[i] + " ");
- }
- System.out.println("");
- }
- }
有序数组的java代码:
- public class OrderedArray {
- private long[] a;
- private int size; //数组的大小
- private int nElem; //数组中有多少项
- public OrderedArray(int max) { //初始化数组
- this.a = new long[max];
- this.size = max;
- this.nElem = 0;
- }
- public int size() { //返回数组实际有多少值
- return this.nElem;
- }
- //--------------二分法查找某个值----------------//
- public int find(long searchNum) {
- int lower = 0;
- int upper = nElem - 1;
- int curr;
- while(true) {
- curr = (lower + upper) / 2;
- if(a[curr] == searchNum)
- return curr;
- else if(lower > upper)
- return -1;
- else {
- if(a[curr] < searchNum)
- lower = curr + 1;
- else
- upper = curr - 1;
- }
- }
- }
- public boolean insert(long value) { //插入某个值
- if(nElem == size){
- System.out.println("数组已满!");
- return false;
- }
- int j;
- for(j = 0; j < nElem; j++){
- if(a[j] > value)
- break;
- }
- for(int k = nElem; k > j; k--) {
- a[k] = a[k-1];
- }
- a[j] = value;
- nElem++;
- return true;
- }
- public boolean delete(long value) { //删除某个值
- int j = find(value);
- if(j == -1){
- System.out.println("没有该元素!");
- return false;
- }
- if(nElem == size) {
- for(int k = j; k < nElem - 1; k++) {
- a[k] = a[k+1];
- }
- a[nElem-1] = 0;
- }
- else {
- for(int k = j; k < nElem; k++) {
- a[k] = a[k+1];
- }
- }
- nElem--;
- return true;
- }
- public void display() { //打印整个数组
- for(int i = 0; i < nElem; i++) {
- System.out.print(a[i] + " ");
- }
- System.out.println("");
- }
- }
对于数组这种数据结构,线性查找的话,时间复杂度为O(N),二分查找的话时间为O(longN),无序数组插入的时间复杂度为O(1),有序数组插入的时间复杂度为O(N),删除操作的时间复杂度均为O(N)。
http://blog.csdn.net/eson_15/article/details/51126182
阅读全文
0 0
- 数据结构与算法01 之数组
- 数据结构与算法之数组
- 数据结构与算法之数组
- 【数据结构与算法01】数组
- 【数据结构与算法01】数组
- Java数据结构与算法之数组
- Java数据结构与算法之Array数组
- java数据结构与算法之数组篇
- Java数据结构与算法之Array数组
- 算法与数据结构 - 数组
- 数据结构与算法:数组
- 算法与数据结构 之数组(三) 趣味算法
- 《算法学习与数据结构》part3 算法分析与数据结构之数组和广义表
- 数据结构与算法之—数组(一)
- 数据结构与算法之—数组(二)
- 数据结构与算法之动态数组实现堆栈
- Java数据结构与算法之数组(一)
- Java数据结构与算法之数组(二)
- IE的debug工具对程序进行debug跟踪JS代码
- Java 编写过滤手机号码或者固定电话的工具类
- Java面试宝典(6)混合(前端 + 数据库)
- SpringMVC学习(9):实现注解式权限验证
- jsp与httpservlet的微小区别
- 数据结构与算法01 之数组
- Filter详解
- Java中实现pdf在线查看和下载
- Java开发中的23种设计模式详解(2)结构型
- Java中synchronized 修饰在static方法和非static方法的区别
- java中多种方式解析xml
- Spring学习笔记(14)——注解零配置
- cmd中java的编译命令——java和javac、javap
- 归并排序