日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...

發布時間:2025/3/20 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了java數據結構之鏈表、棧、隊列、樹的實現方法。分享給大家供大家參考,具體如下:

最近無意中翻到一本書,閑來無事寫幾行代碼,實現幾種常用的數據結構,以備后查。

一、線性表(鏈表)

1、節點定義

/**鏈表節點定義

* @author colonel

*

*/

class node {

public int data;

node next=null;

public node(int data){

this.data=data;

}

}

2、鏈表操作類

/**鏈表操作類

* @author colonel

*

*/

public class operateclass {

public node headnode=null;

/*給鏈表添加界節點

* @param data 鏈表節點數據

*/

public node addnode(int data){

node newnode=new node(data);

if (headnode==null) {

headnode=newnode;

newnode.next=null;

return headnode;

}

node tempnode=headnode;

while (tempnode.next!=null) {

//tempnode=headnode;

tempnode=tempnode.next;

}

tempnode.next=newnode;

return headnode;

}

/**刪除節點

* @param 刪除節點的位置

*

*/

public boolean delnode(int index){

if (index<1||index>length()) {

return false;

}

if (index==1) {

headnode=headnode.next;

return true;

}

node prenode=headnode;

node curnode=prenode.next;

int count=2;

while (curnode!=null) {

if (count==index) {

prenode.next=curnode.next;

return true;

}

prenode=curnode;

curnode=curnode.next;

count++;

}

return true;

}

/**取鏈表的長度

* @return返回鏈表的長度

*/

public int length(){

int length=0;

node temp=headnode;

while (temp!=null) {

length++;

temp=temp.next;

}

return length;

}

/**按照值域對鏈表數據排序

* @return 返回排序后的鏈表頭節點

*/

public node orderlist(){

node nextnode=null;

int temp=0;

node curnode=headnode;

while (curnode.next!=null) {

nextnode=curnode.next;

while (nextnode!=null) {

if (curnode.data>nextnode.data) {

temp=curnode.data;

curnode.data=nextnode.data;

nextnode.data=temp;

}

nextnode=nextnode.next;

}

curnode=curnode.next;

}

return headnode;

}

/**

* 去除鏈表中值域重復的元素

*/

public void redrepeat(){

if (length()<=1) {

return;

}

node curnode=headnode;

while (curnode!=null) {

node insidnode=curnode.next;

node insidprenode=insidnode;

while (insidnode!=null) {

if (insidnode.data==curnode.data) {

insidprenode.next=insidnode.next;

//return;

}

insidprenode=insidnode;

insidnode=insidnode.next;

}

curnode=curnode.next;

}

}

/**倒序輸出鏈表中所有的數據

* @param hnode 鏈表頭節點

*/

public void reverseprint(node hnode){

if (hnode!=null) {

reverseprint(hnode.next);

system.out.println(hnode.data);

}

}

/**

* 從頭節點開始到為節點結尾打印出值

*/

public void printlist(){

node tmpnode=headnode;

while (tmpnode!=null) {

system.out.println(tmpnode.data);

tmpnode=tmpnode.next;

}

}

}

二、棧

1、該棧使用數組實現,具體的棧操作類

class mystack{

private object[] stack;

int top=-1;

public mystack(){

stack=new object[10];

}

public boolean isempty(){

return top==0;

}

/**彈出棧頂元素(不刪除)

* @return

*/

public e peek(){

if (isempty()) {

return null;

}

return (e) stack[top];

}

/**出棧站頂元素

* @return 棧頂元素

*/

public e pop(){

e e=peek();

stack[top]=null;

top--;

return e;

}

/**壓棧

* @param item 待壓元素

* @return 返回待壓元素

*/

public e push(e item){

//ensurecapacity(top+1);

stack[++top]=item;

return item;

}

/**棧滿擴容

* @param size

*/

public void ensurecapacity(int size){

int len=stack.length;

if (size>len) {

int newlen=10;

stack=arrays.copyof(stack, newlen);

}

}

/**返回棧頂元素

* @return

*/

public e gettop(){

if (top==-1) {

return null;

}

return (e) stack[top];

}

}

三、隊列

該隊列使用鏈式實現

1、隊節點定義

/**

* @author colonel

*隊節點定義

* @param

*/

class queuenode{

queuenode nextnode=null;

elem data;

public queuenode(elem data){

this.data=data;

}

}

2、隊列操作類

/**

* @author colonel

*隊列操作類

* @param

*/

class myqueue{

private queuenode headnode=null;

private queuenode tailnode=null;

private queuenode lastnode=null;

/**判斷該隊列是否為空

* @return 返回true or false

*/

public boolean isempty(){

return headnode==tailnode;

}

/**入隊操作

* @param data 節點元素值

*/

public void put(elem data){

queuenode newnode=new queuenode(data);

if (headnode==null&&tailnode==null) {

headnode=tailnode=newnode;

//tailnode=headnode.nextnode;

lastnode=tailnode.nextnode;

return;

}

tailnode.nextnode=newnode;

tailnode=newnode;

lastnode=tailnode.nextnode;

//tailnode=tailnode.nextnode;

}

/**出隊操作

* @return 返回出隊元素

*/

public elem pop(){

if (headnode==lastnode) {

return null;

}

queuenode tempnode=headnode;

elem statelem=tempnode.data;

headnode=tempnode.nextnode;

return statelem;

}

/**返回隊列長度

* @return 長度

*/

public int size(){

if (isempty()) {

return 0;

}

int length=0;

queuenode temp=headnode;

while (temp!=null) {

length++;

temp=temp.nextnode;

}

return length;

}

}

四、二叉樹

1、節點定義

/**樹節點定義

* @author colonel

*

*/

class treenode{

public int data;

public treenode leftnode;

public treenode rightnode;

public treenode(int data){

this.data=data;

this.leftnode=null;

this.rightnode=null;

}

}

2、二叉樹操作類

/**二叉排序樹操作類

* @author colonel

*

*/

class operatetree{

public treenode rootnode;

public operatetree(){

rootnode=null;

}

/**元素插入二叉排序樹

* @param data 待插節點數據

*/

public void insert(int data){

treenode newnode=new treenode(data);

if (rootnode==null) {

rootnode=newnode;

}else {

treenode current=rootnode;

treenode parent;

while (true) {

parent=current;

if (data

current=current.leftnode;

if (current==null) {

parent.leftnode=newnode;

return;

}

} else {

current=current.rightnode;

if (current==null) {

parent.rightnode=newnode;

return;

}

}

}

}

}

/**構建二叉排序樹

* @param item 元素數組

*/

public void buildtree(int[] item){

for (int i = 0; i < item.length; i++) {

insert(item[i]);

}

}

/**

* 先序遍歷二叉樹

*/

public void preorder(treenode root){

if (root!=null) {

system.out.println(root.data);

preorder(root.leftnode);

preorder(root.rightnode);

}

}

/**中序遍歷

* @param root

*/

public void inorder(treenode root){

if (root!=null) {

inorder(root.leftnode);

system.out.println(root.data);

inorder(root.rightnode);

}

}

/**后序遍歷

* @param root

*/

public void afterorder(treenode root){

if (root!=null) {

afterorder(root.leftnode);

afterorder(root.rightnode);

system.out.println(root.data);

}

}

/**

* 層序遍歷二叉排序樹

*/

public void layertrave(){

if (this.rootnode==null) {

return;

}

queue myqueue=new linkedlist<>();

myqueue.add(rootnode);

while (!myqueue.isempty()) {

treenode tempnode=myqueue.poll();

system.out.println(tempnode.data);

if (tempnode.leftnode!=null) {

myqueue.add(tempnode.leftnode);

}

if (tempnode.rightnode!=null) {

myqueue.add(tempnode.rightnode);

}

}

}

五、總結

更好的理解數據結構為何物,還需繼續探索,謹記。by:colonel

希望本文所述對大家java程序設計有所幫助。

希望與廣大網友互動??

點此進行留言吧!

總結

以上是生活随笔為你收集整理的Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。