数据结构java实现代码
双向链表
public class Node {
Object o;
Node up;
Node down;
public Object getO() {
return o;
}
public void setO(Object o) {
this.o = o;
}
public Node getUp() {
return up;
}
public void setUp(Node up) {
this.up = up;
}
public Node getDown() {
return down;
}
public void setDown(Node down) {
this.down = down;
}
}
public class SuperList {
Node first;
Node last;
int size;
public void add(Object o) {
Node n=new Node();
n.setO(o);
if(first==null) {
first=n;
last=n;
n.setUp(null);
n.setDown(null);
}else {
last.setDown(n);
n.setUp(last);
n.setDown(null);
last=n;
}
size++;
}
public boolean check(int index) {
if(index<0||index>size) {
System.out.println("索引出问题");
return false;
}
return true;
}
public int getSize() {
return size;
}
public Node getNode(int index) {
boolean b=check(index);
if(b==false) {
return null;
}
Node n=first;
for(int i=0;i<index;i++) {
n=n.getDown();
}
return n;
}
public void remove(int index) {
Node n=getNode(index);
n.getUp().setDown(n.getDown());
n.getDown().setUp(n.getUp());
size--;
}
public void set(int index,Object o) {
Node n=getNode(index);
n.setO(o);
}
public Object get(int index) {
return getNode(index).getO();
}
Node first;
Node last;
int size;
public void add(Object o) {
Node n=new Node();
n.setO(o);
if(first==null) {
first=n;
last=n;
n.setUp(null);
n.setDown(null);
}else {
last.setDown(n);
n.setUp(last);
n.setDown(null);
last=n;
}
size++;
}
public boolean check(int index) {
if(index<0||index>size) {
System.out.println("索引出问题");
return false;
}
return true;
}
public int getSize() {
return size;
}
public Node getNode(int index) {
boolean b=check(index);
if(b==false) {
return null;
}
Node n=first;
for(int i=0;i<index;i++) {
n=n.getDown();
}
return n;
}
public void remove(int index) {
Node n=getNode(index);
n.getUp().setDown(n.getDown());
n.getDown().setUp(n.getUp());
size--;
}
public void set(int index,Object o) {
Node n=getNode(index);
n.setO(o);
}
public Object get(int index) {
return getNode(index).getO();
}
}
顺序栈实现
public class stack {
Object[] data;
int top=-1;//栈首指针
int max;
stack(){
}
stack(int max){
this.max=max;
data=new Object[max];
}
//判断栈是否满
public boolean check() {
if(top<max-1) {
return false;
}
return true;
}
public void push(Object o) {
if(check()) {
System.out.println("栈已经满了,无法继续入栈");
return;
}
top+=1;
data[top]=o;
}
public Object pop() {
if(top==-1) {
System.out.println("栈为空,无法出栈");
return null;
}
Object ob=peek();
top-=1;
return ob;
}
public Object peek() {
return data[top];
}
}
Object[] data;
int top=-1;//栈首指针
int max;
stack(){
}
stack(int max){
this.max=max;
data=new Object[max];
}
//判断栈是否满
public boolean check() {
if(top<max-1) {
return false;
}
return true;
}
public void push(Object o) {
if(check()) {
System.out.println("栈已经满了,无法继续入栈");
return;
}
top+=1;
data[top]=o;
}
public Object pop() {
if(top==-1) {
System.out.println("栈为空,无法出栈");
return null;
}
Object ob=peek();
top-=1;
return ob;
}
public Object peek() {
return data[top];
}
}
顺序队列实现
public class Queue {
Object[] data;
int front=0;
int rear=0;
int max;
public Queue() {
}
Queue(int max){
this.max=max;
data=new Object[max];
}
public boolean isEmpty() {
if(front==rear) {
return true;
}else {
return false;
}
}
public int size() {
return rear-front;
}
public boolean isFull() {
if(size()==max) {
return true;
}
return false;
}
public Object chudui() {
if(isEmpty()) {
System.err.println("对为空,无法出队");
return null;
}
Object o=data[front];
front+=1;
return o;
}
public void rudui(Object o) {
if(isFull()) {
System.out.println("对已经满了,无法入队");
return;
}
rear+=1;
}
Object[] data;
int front=0;
int rear=0;
int max;
public Queue() {
}
Queue(int max){
this.max=max;
data=new Object[max];
}
public boolean isEmpty() {
if(front==rear) {
return true;
}else {
return false;
}
}
public int size() {
return rear-front;
}
public boolean isFull() {
if(size()==max) {
return true;
}
return false;
}
public Object chudui() {
if(isEmpty()) {
System.err.println("对为空,无法出队");
return null;
}
Object o=data[front];
front+=1;
return o;
}
public void rudui(Object o) {
if(isFull()) {
System.out.println("对已经满了,无法入队");
return;
}
rear+=1;
}
}
循环队列实现
public class xunhuanQueue {
Object[] data;
int front=0;
int rear=0;
int max;
public xunhuanQueue(int max) {
this.max=max;
data=new Object[max];
}
public boolean isEmpty() {
if(rear==front) {
return true;
}
return false;
}
public boolean isFull() {
if((rear+1)%max==front) {
return true;
}
return false;
}
public int Size() {
return rear-front;
}
public void rudui(Object o) {
if(isFull()) {
System.out.println("队满,无法入队");
return;
}
data[rear]=o;
rear=(rear+1)%max;
}
public void chudui() {
if(isEmpty()) {
System.out.println("队空,无法出队");
return;
}
data[front]=null;
front=(front+1)%max;
}
Object[] data;
int front=0;
int rear=0;
int max;
public xunhuanQueue(int max) {
this.max=max;
data=new Object[max];
}
public boolean isEmpty() {
if(rear==front) {
return true;
}
return false;
}
public boolean isFull() {
if((rear+1)%max==front) {
return true;
}
return false;
}
public int Size() {
return rear-front;
}
public void rudui(Object o) {
if(isFull()) {
System.out.println("队满,无法入队");
return;
}
data[rear]=o;
rear=(rear+1)%max;
}
public void chudui() {
if(isEmpty()) {
System.out.println("队空,无法出队");
return;
}
data[front]=null;
front=(front+1)%max;
}
}
二叉排序树实现
public class Node {
int o;
Node leftChild;
Node rightChild;
public int getO() {
return o;
}
public void setO(int o) {
this.o = o;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
int o;
Node leftChild;
Node rightChild;
public int getO() {
return o;
}
public void setO(int o) {
this.o = o;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
}
public class BinaryTree {
Node root;
public void insert(int o) {
Node n=new Node();
n.setO(o);
if(root==null) {
n.setLeftChild(null);
n.setRightChild(null);
root=n;
}
insert(root,n);
}
public void insert(Node parent,Node n) {
if(parent.getO()==n.getO()) {
return;
}
if(parent.getO()>n.getO()) {
if(parent.getLeftChild()==null) {
parent.setLeftChild(n);
}
insert(parent.getLeftChild(),n);
return;
}
if(parent.getO()<n.getO()) {
if(parent.getRightChild()==null) {
parent.setRightChild(n);
}
insert(parent.getRightChild(),n);
return;
}
}
public boolean isEmpty() {
if(root==null) {
return true;
}
return false;
}
public void XianSearch() {
if(isEmpty()) {
System.out.println("树为空,无法遍历");
return ;
}
XianSearch(root);
}
public void XianSearch(Node parent) {
if(parent!=null) {
System.out.println(parent.getO());
XianSearch(parent.getLeftChild());
XianSearch(parent.getRightChild());
}
}
public void zhongSearch() {
if(isEmpty()) {
System.out.println("树为空无法宾利");
return;
}
zhongSearch(root);
}
public void zhongSearch(Node parent) {
if(parent!=null) {
zhongSearch(parent.getLeftChild());
System.out.println(parent.getO());
zhongSearch(parent.getRightChild());
}
}
public void houSearch() {
if(isEmpty()) {
System.out.println("树为空无法i案例");
return;
}
houSearch(root);
}
public void houSearch(Node parent) {
if(parent!=null) {
houSearch(parent.getLeftChild());
houSearch(parent.getRightChild());
System.out.println(parent.getO());
}
}
public void clear() {
root=null;
}
public int getHeight() {
if(isEmpty()) {
return 0;
}
return getHeight(root);
}
public int getHeight(Node parent) {
if(parent!=null) {
int l=getHeight(parent.getLeftChild());
int r=getHeight(parent.getRightChild());
return l>r?l+1:r+1;
}
return 0;
}
Node root;
public void insert(int o) {
Node n=new Node();
n.setO(o);
if(root==null) {
n.setLeftChild(null);
n.setRightChild(null);
root=n;
}
insert(root,n);
}
public void insert(Node parent,Node n) {
if(parent.getO()==n.getO()) {
return;
}
if(parent.getO()>n.getO()) {
if(parent.getLeftChild()==null) {
parent.setLeftChild(n);
}
insert(parent.getLeftChild(),n);
return;
}
if(parent.getO()<n.getO()) {
if(parent.getRightChild()==null) {
parent.setRightChild(n);
}
insert(parent.getRightChild(),n);
return;
}
}
public boolean isEmpty() {
if(root==null) {
return true;
}
return false;
}
public void XianSearch() {
if(isEmpty()) {
System.out.println("树为空,无法遍历");
return ;
}
XianSearch(root);
}
public void XianSearch(Node parent) {
if(parent!=null) {
System.out.println(parent.getO());
XianSearch(parent.getLeftChild());
XianSearch(parent.getRightChild());
}
}
public void zhongSearch() {
if(isEmpty()) {
System.out.println("树为空无法宾利");
return;
}
zhongSearch(root);
}
public void zhongSearch(Node parent) {
if(parent!=null) {
zhongSearch(parent.getLeftChild());
System.out.println(parent.getO());
zhongSearch(parent.getRightChild());
}
}
public void houSearch() {
if(isEmpty()) {
System.out.println("树为空无法i案例");
return;
}
houSearch(root);
}
public void houSearch(Node parent) {
if(parent!=null) {
houSearch(parent.getLeftChild());
houSearch(parent.getRightChild());
System.out.println(parent.getO());
}
}
public void clear() {
root=null;
}
public int getHeight() {
if(isEmpty()) {
return 0;
}
return getHeight(root);
}
public int getHeight(Node parent) {
if(parent!=null) {
int l=getHeight(parent.getLeftChild());
int r=getHeight(parent.getRightChild());
return l>r?l+1:r+1;
}
return 0;
}
public int getNodes() {
if(isEmpty()) {
System.out.println("树为空");
}
return getNodes(root);
}
public int getNodes(Node parent) {
if(parent!=null) {
int left=getNodes(parent.getLeftChild());
int right=getNodes(parent.getRightChild());
return left+right+1;
}
return 0;
}
}
if(isEmpty()) {
System.out.println("树为空");
}
return getNodes(root);
}
public int getNodes(Node parent) {
if(parent!=null) {
int left=getNodes(parent.getLeftChild());
int right=getNodes(parent.getRightChild());
return left+right+1;
}
return 0;
}
}