版权声明:文章为作者原创,若要转载请获得作者同意。尊重版权,从你我做起! https://blog.csdn.net/qq_37768971/article/details/88207183
一、实现功能
使用链表来实现栈的getSize、isEmpty、push、pop、peek功能
二、具体代码:
1.上一节课实现的链表:
package IMUHERO;
/**
* @作者:IMUHERO
* @时间:2019/3/5
* @内容:带虚拟头结点的链表的基本功能实现
*/
public class LinkedList<E> {
private class Node{
public E e;
public Node next;
public Node(E e,Node next){
this.e=e;
this.next=next;
}
public Node(E e){
this.e=e;
this.next=null;
}
public Node(){
this(null,null);
}
@Override
public String toString() {
return e.toString();
}
}
private Node dummyHead;
private int size;
//构造方法,新建虚拟头结点,指向null。size=0;
public LinkedList(){
size=0;
dummyHead=new Node();
}
public int getSize(){
return size;
}
public boolean isEmpty(){
return size==0;
}
//添加元素
public void add(int index ,E e){
Node prev=dummyHead;
if (index<0||index>size )throw new IllegalArgumentException("index is an illegal input");
for (int i=0;i<index ;i++){
prev=prev.next;
}
prev.next=new Node(e,prev.next);
size++;
}
public void addFirst(E e){
add(0,e);
}
public void addLast(E e){
add(size,e);
}
//获得元素
public E get(int index){
if (index<0||index>size )throw new IllegalArgumentException("index is an illegal input");
Node cur =dummyHead.next;
for (int i=0;i<index;i++){
cur=cur.next;
}
size--;
return cur.e;
}
public E getFirst(){
return get(0);
}
//设置元素
public void set(int index,E e){
if (index<0||index>size )throw new IllegalArgumentException("index is an illegal input");
Node cur =dummyHead.next;
for (int i=0;i<index;i++){
cur=cur.next;
}
cur.e=e;
size++;
}
//查询是否含有e元素
public boolean contain(E e){
for (Node cur=dummyHead.next;cur!=null;cur=cur.next){
if (cur.e.equals(e))return true;
}
return false;
}
//删除索引为index处的元素
public E remove(int index ){
if (index<0||index>size )throw new IllegalArgumentException("index is an illegal input");
Node prev=dummyHead;
for (int i=0;i<index;i++){
prev=prev.next;
}
Node redel=prev.next;
prev.next=redel.next;
redel.next=null;
size--;
return redel.e;
}
public E removeFirst(){
return remove(0);
}
//删除e
public void removeElement(E e){
Node prev=dummyHead;
while (prev.next!=null){
if (prev.next.e.equals(e))break;
prev=prev.next;
}
if (prev.next!=null){
Node redel=prev.next;
prev.next=redel.next;
redel.next=null;
System.out.println(e+"已经被删除");
}
else System.out.println("未查询到元素"+e);
}
@Override
public String toString() {
StringBuilder strb=new StringBuilder();
Node cur=dummyHead.next;
while (cur!=null){
strb.append(cur.e+"->");
cur=cur.next;
}
strb.append("null");
return strb.toString();
}
}
2.定义一个Stack的接口:
package IMUHERO;
public interface Stack<E> {
int getSize();
boolean isEmpty();
void push(E e);
E pop();
E peek();
}
3.LinkedListStack重写接口的功能:
package IMUHERO;
public class LinkedListStack<E>implements Stack<E>{
private LinkedList<E>stack;
public LinkedListStack(){
stack=new LinkedList<>();
}
@Override
public int getSize(){
return stack.getSize();
}
@Override
public boolean isEmpty(){
return stack.isEmpty();
}
@Override
public void push(E e){
stack.addFirst(e);
}
@Override
public E pop(){
return stack.removeFirst();
}
@Override
public E peek(){
return stack.getFirst();
}
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: ");
res.append("top:");
res.append(stack);
return res.toString();
}
}
三、功能测试:
package IMUHERO;
public class Main {
public static void main(String[] args) {
// write your code here
LinkedListStack LLS=new LinkedListStack();
for (int i=0;i<10;i++){
LLS.push(i);
System.out.println(LLS);
}
for (int i=0;i<5;i++){
LLS.pop();
System.out.println(LLS);
}
System.out.println(LLS.getSize());
System.out.println(LLS.isEmpty());
System.out.println(LLS.peek());
System.out.println(LLS);
}
}
四、输出结果:
Stack: top:0->null
Stack: top:1->0->null
Stack: top:2->1->0->null
Stack: top:3->2->1->0->null
Stack: top:4->3->2->1->0->null
Stack: top:5->4->3->2->1->0->null
Stack: top:6->5->4->3->2->1->0->null
Stack: top:7->6->5->4->3->2->1->0->null
Stack: top:8->7->6->5->4->3->2->1->0->null
Stack: top:9->8->7->6->5->4->3->2->1->0->null
Stack: top:8->7->6->5->4->3->2->1->0->null
Stack: top:7->6->5->4->3->2->1->0->null
Stack: top:6->5->4->3->2->1->0->null
Stack: top:5->4->3->2->1->0->null
Stack: top:4->3->2->1->0->null
5
false
4
Stack: top:4->3->2->1->0->null
实现了栈的基本功能!!!