顺序栈操作

Posted ljl150

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序栈操作相关的知识,希望对你有一定的参考价值。

一,栈的定义

   ♦ 栈:是限定在表尾进行插入或删除操作的线性表。

   ♦对栈来说,一般将表尾称为栈顶(top),表头端称为栈底(base)。不含元素的空表称为空栈。

   ♦ 栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出的线性表。

技术图片

 

 

 

二,栈的表示与实现

  顺序栈:即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,

                同时附设指针top,初值指向栈底(top=0),每当插入一个新的栈顶元素指针top+1,同样的删

                除一个栈顶元素top-1,因此非空栈中,指针始终指向栈顶元素的下一 个位置。

      指针base为栈底指针,在顺序栈中,它始终指向栈底位置。

                top=0,为空栈,top=stack.length,为栈满。

    代码实现

  1 /**
  2  * 顺序栈代码实现
  3  */
  4 import java.util.*;
  5 class SeqStack
  6     // 存储栈元素的数组
  7     private int[] stack;
  8     // 标识栈顶的位置
  9     private int top;
 10 
 11     // 默认构造,初始大小为10
 12     public SeqStack() 
 13         /*this.stack=new int[10];   //因为该栈的底层是数组
 14         this.top=0;*/
 15         this(10);      //调用另一个构造函数
 16     
 17 
 18     // 构造函数,用户指定栈的初始大小
 19     public SeqStack(int size) 
 20         this.stack=new int[size];   //因为该栈的底层是数组
 21         this.top=0;     //初始时,栈为空时,top指向stack[0]位
 22     
 23 
 24     // 入栈操作
 25     public void push(int val)             //入栈前先要对栈空间进行检测
 26         if(this.stack.length==this.top)  //因为top指向的是所填元素的下一位,所以当top值等于stack.length值时,则栈满。
 27              //栈满,若要继续存储元素,则要先进行扩容。
 28             this.stack=Arrays.copyOf(this.stack,this.stack.length+1);
 29         
 30         this.stack[top]=val;    //因为top指向的是所填元素的下一位,所以此时top位为空,直接将val存储在stack[top]位。
 31         this.top++;            //填完元素之后,将top指向下一位。
 32     
 33 
 34     // 出栈,并把出栈的元素返回
 35     public void pop(int count)      //自定义打印长度count
 36         int j=this.top;
 37         for(int i=this.top-1;i>=(this.top-count);i--,j--)  //打印一个元素,top减1
 38         
 39             System.out.print(this.stack[i]+" ");
 40         
 41         this.top=j;
 42         System.out.println();
 43     
 44     public int pop()    //默认出栈一个元素
 45 
 46             //this.top--;
 47             int val=this.stack[--this.top];
 48             return val;
 49 
 50     
 51 
 52         // 返回栈顶元素
 53     public int top()
 54         if(empty())        //先判断栈中是否有元素
 55             return 00000000;
 56         else
 57             return stack[top-1];
 58         
 59 
 60     
 61 
 62     // 判断栈空
 63     public boolean empty()
 64 
 65        /* if(this.top==0)
 66         
 67             return true;
 68             //System.out.println("栈空");
 69         
 70         return false;*/
 71        return this.top==0;  //返回Boolean型值
 72     
 73 
 74     // 判断栈满
 75     public boolean full()
 76         /*if(this.top==this.stack.length)
 77         
 78             return true;
 79         
 80         return false;*/
 81         return this.top==this.stack.length;  //返回Boolean型值
 82     
 83 
 84     // 返回栈元素的个数
 85     public int size()
 86         return this.top;   //因为top指向栈顶元素下一位,且元素是从0位开始存储的
 87     
 88 
 89     // 自定义栈元素的打印方式
 90     //@Override
 91     public String toString(int[] arr) 
 92         String str=new String();
 93         for(int i=this.top-1;i>=0;i--)  //因为当栈不为空时,top指向的始终是栈顶元素的下一位
 94         
 95           str=str+this.stack[i]+" " ;     //用连接符的方式将数组中的数打印出来
 96         
 97         return  str;
 98     
 99 
100 
101 /**
102  * 描述: 顺序栈代码测试
103  */
104 
105 
106 
107 
108 public class SeqStacktext 
109     public static void main(String[] args) 
110 
111         SeqStack ss=new SeqStack(5);  //新new一个栈(数组),jvm自动调用构造方法。
112         for(int i=0;i<5;i++)
113         
114             ss.push(i+1);    //入栈操作
115         
116 
117         System.out.println(ss.top());  //打印栈顶元素
118 
119         if(ss.full())    //判断栈满
120         
121             System.out.println("栈满!");
122         
123         System.out.println(ss.size());
124         ss.pop(5);     // 定义出栈元素个数
125         if(ss.empty())    //判断栈空
126         
127             System.out.println("栈空!");
128         
129        // ss.pop();            //默认出栈一个元素
130     
131 

运行结果:

技术图片

 

以上是关于顺序栈操作的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

顺序栈--Java实现

栈基本操作(顺序栈)

王道3.1 顺序栈以及链式栈

王道3.1 顺序栈以及链式栈

顺序栈的基本操作