数组:
数组的基本操作:
public class partList {
public static void main(String[] args) {
//定义一个新的列表
int [] array = new int[3];
//数组的长度
int arrayLength = array.length ;
//给数组中的元素赋值
for(int i = 0; i<arrayLength;i++){
array[i] = i;
}
//遍历数组中的每个元素
for(int i =0; i<arrayLength; i++){
System.out.println("数组中的第"+i+"个元素为"+array[i]);
}
}
}
数组的添加:
package dataStructure;
import java.lang.reflect.Array;
import java.util.Arrays;
public class shuzu {
public static void main(String[] args) {
// 创建一个新的数组
int [] array = new int [] {2,3,4};
//快速查看数组中的元素
System.out.println(Arrays.toString(array));
//要加入数组的目标元素
int des = 5;
//数组长度
int length = array.length;
System.out.println(length);
//添加一个新的元素在数组中
//创建新的数组
int [] array2 = new int[4];
//将原来数组的每个元素添加到新的数组中去
for(int i = 0;i<=length ;i++){
if(i<length){
array2[i] = array[i];
}else {
array2[length] = des;
}
}
array = array2;
System.out.println(Arrays.toString(array));
}
}
数组的删除:
package dataStructure;
import java.util.Arrays;
public class shuzu2 {
public static void main(String[] args) {
// 创建一个新的数组
int [] array = new int [] {2,3,4,5,6,7};
//快速查看数组中的元素
System.out.println(Arrays.toString(array));
//要删除的数组中的目标元素的下标 / 数值为6
int des = 4;
//闯将一个新的数组,把删除前的赋值再新的数组,之后的赋值给新的数组
int [] array2 = new int[array.length-1];
for(int i =0; i<array.length-1 ;i++) {
if (i < des) {
array2[i] = array[i];
} else {
array2[i] = array[i + 1];
}
}
array = array2 ;
System.out.println(Arrays.toString(array));
}
}
面向对象数组:
package dataStructure;
import java.util.Arrays;
public class MyArray {
private int [] elements ;
public MyArray(){
elements = new int [0];
}
///获取数组对象的方法:
public int size(){
return elements.length;
}
///展现数组中的元素
public void show(){
System.out.println(Arrays.toString(elements));
}
///在数组中添加一个元素:
public void add(int element){
int [] element2 = new int[elements.length+1];
for(int i = 0;i<elements.length ;i++){
element2[i] = elements[i];
}
element2[elements.length] = element;
elements = element2 ;
}
///在数组中删除一个元素
public void delete(int element_index){
int [] element2 = new int[elements.length-1];
if(element_index>elements.length-1){
System.out.println("Error ; length is too long");
}else {
for(int i =0; i<elements.length-1 ;i++) {
if (i < element_index) {
element2[i] = elements[i];
} else {
element2[i] = elements[i + 1];
}
}
}
elements = element2;
}
///取出指定位置的元素
public int get(int index) {
return elements[index];
}
///插入一个元素到指定的
public void insert(int index , int value){
int [] element2 = new int [elements.length+1];
for(int i =0; i<= elements.length; i++){
if(i<index){
element2[i] = elements[i];
}else if(i == index){
element2[index] = value;
}else{
element2[i] = elements[i-1];
}
}
elements = element2;
}
///替换一个位置的指定元素
public void set(int index, int new_value){
elements[index] = new_value;
}
}
查找算法:
查找算法在数组中分为两类:线性查找和二分法查找
线性查找方法(check):
public void check(int value){
int index = -1 ;
for(int i =0; i<elements.length; i++){
if(elements[i] == value){
index = i;
}else {
continue;
}
}
if(index == -1){
System.out.println("您搜索的元素不存在");
}else{
System.out.println(index);
}
}
二分法查找:
package dataStructure;
/// binary search
public class check {
public static void main(String[] args) {
//目标数组
int [] array = new int[]{0,1,2,3,4,5,6,7};
//目标元素
int target = 3;
int index = -1;
int begin = 0;
int end = array.length;
int middle = (begin+end)/ 2;
System.out.println(middle);
while (true){
if(array[middle] == target){
index = middle;
break;
}else {
if(target>array[middle]){
begin = begin+1;
}else {
end = end -1;
}
middle = (begin+end)/2;
}
}
System.out.println("this is target index"+index);
}
}
栈
package dataStructure;
public class MyStack {
int [] elements ;
public MyStack(){
elements = new int[0] ;
}
//压入元素
public void push(int element){
int [] element2 = new int[elements.length+1];
for(int i = 0;i<elements.length ;i++){
element2[i] = elements[i];
}
element2[elements.length] = element;
elements = element2 ;
}
//取出栈的元素
public int pop(){
if(elements.length==0){
throw new RuntimeException("stack is empty");
}
int element = elements[elements.length-1];
//创建新的数组,重新装入剩余的元素
int [] element2 = new int[elements.length-1];
for(int i =0; i<elements.length-1; i++){
element2[i] = elements[i];
}
elements = element2;
return element ;
}
//查看栈顶元素
public int peek(){
return elements[elements.length-1];
}
//判断栈是否为空
public boolean isEmpty(){
return elements.length == 0;
}
}
队列:
package dataStructure;
import java.util.Arrays;
public class MyQueue {
int [] elements;
public MyQueue(){
elements = new int [0];
}
//入队
public void add(int element){
int [] element2 = new int[elements.length+1];
for(int i = 0;i<elements.length ;i++){
element2[i] = elements[i];
}
element2[elements.length] = element;
elements = element2 ;
}
//出队
public int poll(){
int poll_target = elements[0];
int [] element2 = new int[elements.length-1];
for(int i =1 ;i<elements.length;i++){
element2[i-1] = elements[i];
}
elements = element2;
return poll_target;
}
///展现数组中的元素
public void show(){
System.out.println(Arrays.toString(elements));
}
}
单链表
单链表的基本操作:
package dataStructure;
public class Node {
//节点内容
int data ;
//下一个节点
Node next;
public Node(int data){
this.data = data;
}
//
// //为节点追加节点
// public void append(Node n){
// this.next = n;
// }
public Node append(Node n){
//当前节点
Node CurrentNode = this;
while (true){
Node NextNode = CurrentNode.next;
if(CurrentNode.next == null){
break;
}
CurrentNode = NextNode;
}
CurrentNode.next = n;
return this;
}
//获取下一个节点
public Node next(){
return this.next;
}
public int getData(){
return this.data;
}
//当前节点是否为最后一个节点
public boolean isLast(){
Node CurrentNode = this;
if(this.next==null){
return true;
}else{
return false;
}
}
}
单链表的增加与删除:
package dataStructure;
public class Node {
//节点内容
int data ;
//下一个节点
Node next;
//有参数的构造方法
public Node(int data){
this.data = data;
}
//在节点之后添加一个节点
public Node append(Node n){
//当前节点
Node CurrentNode = this;
while (true){
Node NextNode = CurrentNode.next;
if(CurrentNode.next == null){
break;
}
CurrentNode = NextNode;
}
CurrentNode.next = n;
return this;
}
//获取下一个节点
public Node next(){
return this.next;
}
//获取节点的数据
public int getData(){
return this.data;
}
//当前节点是否为最后一个节点
public boolean isLast(){
Node CurrentNode = this;
if(CurrentNode.next==null){
return true;
}else{
return false;
}
}
//显示节点中的所有信息:
public void show(){
Node CurrentNode = this;
while (true){
System.out.println("this is data"+CurrentNode.data );
CurrentNode = CurrentNode.next;
if(CurrentNode.next == null){
System.out.println("this is data"+CurrentNode.data);
break;
}
}
}
//删除下一个节点
public void removeNext(){
Node CurrentNode = this;
Node NextNode = CurrentNode.next;
CurrentNode.next = NextNode.next;
}
// 在节点之后添加一个新的节点
public void addNext(Node n){
//取出当前节点
Node CurrentNote = this;
//取出下一个节点
Node NextNote = CurrentNote.next;
//将新节点作为下一个节点
this.next = n;
//把下一个节点设置为新节点的下一个节点
n.next = NextNote ;
}
}
循环链表:
package dataStructure;
public class NoteLoop {
//节点内容
int data ;
//如果只有一个节点,下一个节点就是自己
NoteLoop next = this; 循环链表就是自己循环自己
//有参数的构造方法
public NoteLoop(int data){
this.data = data;
}
//获取下一个节点
public NoteLoop next(){
return this.next;
}
//获取节点的数据
public int getData(){
return this.data;
}
//删除下一个节点
public void removeNext(){
NoteLoop CurrentNoteLoop = this;
NoteLoop NextNoteloop = CurrentNoteLoop.next;
CurrentNoteLoop.next = NextNoteloop.next;
}
// 在节点之后添加一个新的节点
public void addNext(NoteLoop noteLoop){
//取出当前节点
NoteLoop CurrentNoteLoop = this;
//取出下一个节点
NoteLoop NextNoteLoop = CurrentNoteLoop.next;
//将新节点作为下一个节点
this.next = noteLoop;
//把下一个节点设置为新节点的下一个节点
noteLoop.next = NextNoteLoop ;
}
}