java泛型编程之泛型链栈

来源:互联网 发布:win10无法安装软件 编辑:程序博客网 时间:2024/06/05 15:08

最近突然打算好好学一下java,因此每天给自己定的看三节java编程思想,并用scdn记录下来,权当是检验自己对于语言的理解程度

链栈故名思议是一条头尾相连的链条,就像数据结构里面的链表一样

struct Node{int item;Node * next;}
这是c里面的结构体,用指针将整个链表串联起来,java里面则没有指针,但是也可以构造一个链栈,栈就是先进后出的一种数据结构,要明确栈里面

是要装一些数据类型的对象的,多的不说贴代码先:

package com;public class test<T>{static private class Node<U>//内部类{private U u;Node<U> next;Node(){u=null;next=null;}Node(U item,Node<U> next){this.u=item;this.next=next;}boolean end()//判断链栈中元素是否取完或者为空{return u==null&&next==null;}}Node<T> top=new Node<T>();//节点元素public void push(T item)//入栈{top=new Node<T>(item,top);//每次都新建一个Node,然后新的Node里的成员的Node是先前的Node,也就是将新的Node和旧的Node建立一种联系,形成一个链栈,类似数据结构里面的链表,最开始的元素相当于头结点,节点刚开始元素都为空}public T pop()//出栈{T result=top.u;//暂存表头元素if(!top.end())//判断链栈内元素是否为空{top=top.next;//让第二个元素为此时链栈的头顶元素}return result;//返回表头元素}}
首先是一个泛型类test<T>,然后在这个泛型类里面又有一个内部类Node<U>,这个内部类就包含一个数据类型元素:U u,然后又包含一个自己类型的对象,为什么要这样做呢,就像c语言里面的链表一样,为了将整个链栈串联起来,串联逻辑会在后面的方法里面得到体现,这个内部类有两种构造方式,一个为无参构造,一个为有两个元素的有参

构造,有参构造里面有两个数据类型对象参数,一个为需要存储的元素,一个为内部类对象元素,

top=new Node<T>(item,top);
这段代码意思可以理解为top.next=原来的top,第一个top是新生成的节点,push方法将新节点,新元素推入栈顶,pop方法将链栈头元素取出来,将头元素里面包含的

节点对象作为新的链栈头,之前需要判断一下链栈是否为空,就是end()方法,最后用main方法测试一下这个链表

<pre name="code" class="java">
test<String> temp=new test<String>();//动态建立泛型类型System.out.println(temp.top.u);temp.push("abc");//新元素进栈temp.push("bcd");//第二个元素进栈temp.push("cde");//第三个元素进栈System.out.println(temp.top.u);String str=temp.pop();System.out.println("出栈的表头元素: "+str);System.out.println("新栈的头元素: "+temp.top.u);}

执行结果:

<pre name="code" class="java">nullcde出栈的表头元素: cde新栈的头元素: bcd
nullcde出栈的表头元素: cde新栈的头元素: bcd

可以看到,最后完美的实现了泛型链栈



0 0