java算法------栈

1. 计算机中的栈 我们把生活中的栈的概念引入到计算机中,就是供数据休息的地方,它是一种数据结构,数据既可以进入到栈中, 又可以从栈中出去。 栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出 的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一 个数据被第一个读出来)。 我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。

 

我们将用直接实践法得到经验

 


public interface IStack {
    public void clear();
    public boolean isEmpty();
    public int length();
    public Object peek() ;
    public void push(Object x)throws Exception;
    public Object pop();
    public void display();
}

public class LinkStack implements IStack { 
      
   private Object[] stackElem; // 栈存储空间

   private Node top;
     //栈置空,
       @Override
       public void clear() {
           top=null;
           System.out.println("栈已经清空!");
           System.out.print("\n");
       }

       @Override
       public boolean isEmpty() {
          if(top==null)
             System.out.println("栈为空!");
          else
             System.out.println("栈已不为空!");
              System.out.print("\n");
              
             return top==null;
       }

       @Override
       public int length() {
          Node p=top;
          int length=0;
          while (p!=null){
             p=p.next;
             ++length;
          }
          return length;
       }

       @Override
       public Object peek() {
           if (!isEmpty())//栈非空
              
               return top.data;//取栈顶元素并返回其值
              
           else
              System.out.println("栈为空");
               return null;
       }

       @Override
       public void push(Object x) throws Exception {
           //压栈
           Node p=new Node(x);//构建新节点
           p.next=top;//新节点的next指向top
           top=p;//新结点p成为顶点
           System.out.println("入栈成功!");

       }

       @Override
       public Object pop() {//出栈
           if (isEmpty()) {//栈空
               return null;
               
           } else {
               Node p = top;//p指向被删除结点
               top=top.next;//栈顶元素指向next,原来的p元素被删除
               return p.data;//返回顶点的数据域的值
           }
       }
       public int reverse1(int array[]) {
          
         return 0;
        

       }

      @Override
      public void display() {
          System.out.println("栈的所有元素如下:");
          Node p = top;// 取出带头结点的链栈表中的首结点元素
              while (p!= null) {
                  System.out.print(p.data .toString()+ " ");// 输出数据元素的值
                  p= p.next;// 取下一个结点
              }
              System.out.println();
          }

         
      }


package LinKStack;

import java.util.Scanner;

public class Demo1 {

   /**
    * @param args
    * @throws Exception 
    */
   public static void main(String[] args) throws Exception {
          LinkStack L=new LinkStack();
          boolean loop=true;
          Scanner sc=new Scanner(System.in);
          while(loop){
           System.out.println("请选择下列数字进行相应的操作:");
           System.out.println("1、求栈的长度");
           System.out.println("2、判断栈是否为空");
           System.out.println("3、清空栈");
           System.out.println("4、取栈顶元素");
           System.out.println("5、入栈的操作");
           System.out.println("6、出栈操作");
           System.out.println("7、显示所有元素");
           System.out.println("8、退出");
         int n=sc.nextInt();
         switch(n){
         case 1:{
             System.out.println("栈的长度为:"+L.length());
            
            break;
         }
         case 2:{
            
            L.isEmpty();
            break;
         }
         case 3:{
            
            L.clear();
            break;
         }
         case 4:{
            
            L.peek();
            break;
         }
         case 5:{
            
            System.out.println("请输入入栈元素:");
            int s=sc.nextInt();
            L.push(s);
            break;
         }
         case 6:{
            
            L.pop();
            break;
         }
         case 7:{
            
            L.display();
            break;
         }
         case 8:{
            
            System.exit(0);
            break;
         }
         default:
         }
         
   }

}
}

实验结果

 文字有点绿大家见谅!

 

 栈的逆置实现

 

public static void main(String[] args) throws Exception {
    Object[] list={1,2,3,4,5};
        LinkStack l=new LinkStack();
        System.out.println("把 1 2 3 4 5 逆置后:");
        for (int i = 0; i < list.length; i++) {
           l.push(list[i]);

        }
        for (int i = 0; i < list.length; i++) {
            list[i]=l.pop();
        }
        for (int i = 0; i < list.length; i++) {
            System.out.printf(list[i]+"\t");
        }
    }

 

 

 

おすすめ

転載: blog.csdn.net/weixin_56462645/article/details/121171750