通过数组实现栈(静态栈)的实现

通过数组实现栈

  • 栈的结构
public  class ListStackText<T> {
    //实现栈的数组
    public Object[] statck;
    public int size;


    public ListStackText() {
        statck = new Object[10];//初始化容量
    }
}
  • 进栈
 //进栈
    public void pushStack(T t) {
        //先判断容量,如果容量不够则先扩容
        expandCapacity(size + 1);
        statck[size] = t;
        size++;
    }
     //扩容
    public void expandCapacity(int size) {
        int length = statck.length;
        if (length < size) {
            size = size * 2;//每次扩容一倍
            statck = Arrays.copyOf(statck, size);
        }
    }

  • 出栈
 //出栈
    public void outStack() {
        T t = getTopData();
        if (t != null) {
            statck[size - 1] = null;
            size--;
        }
    }

Java完整代码

public  class ListStackText<T> {
    //实现栈的数组
    public Object[] statck;
    public int size;


    public ListStackText() {
        statck = new Object[10];//初始化容量
    }

    //判断是否为空
    public boolean isEmpty() {
        return this.size == 0;
    }

    //返回栈顶元素
    public T getTopData() {
        T t = null;
        if (size > 0) {
            t = (T) statck[size - 1];
        }
        return t;
    }

    //出栈
    public void outStack() {
        T t = getTopData();
        if (t != null) {
            statck[size - 1] = null;
            size--;
        }
    }


    //进栈
    public void pushStack(T t) {
        //先判断容量,如果容量不够则先扩容
        expandCapacity(size + 1);
        statck[size] = t;
        size++;
    }

    //扩容
    public void expandCapacity(int size) {
        int length = statck.length;
        if (length < size) {
            size = size * 2;//每次扩容一倍
            statck = Arrays.copyOf(statck, size);
        }
    }


    public String ToString() {
        StringBuffer buffer = new StringBuffer("");
        for (int i = 0; i < size; i++) {
            buffer.append(statck[i]);
            buffer.append(",");
        }
  
        return buffer.toString();
    }

    //打印
    public void LogMess() {
        Log.i("LinkTableActivity==", ToString());

    }
}

activity

class LinkTableActivity : AppCompatActivity(), View.OnClickListener {
 
    //静态栈
    var listStack: ListStackText<Int>? = ListStackText()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_link_table)
        init_Listener()
     
        initListStack()
    }

    fun init_Listener() {
       
        //静态栈
        bt_liststack_isempty.setOnClickListener(this)
        bt_liststack_topdata.setOnClickListener(this)
        bt_liststack_put.setOnClickListener(this)
        bt_liststack_out.setOnClickListener(this)
    }

    /**
     * 静态栈(数组实现栈)
     */
    fun initListStack() {
        //往链表内添加数据
        for (i in 0..5) {
            listStack!!.pushStack(i)
        }
        listStack!!.LogMess()
    }


    override fun onClick(v: View?) {
        when (v?.id) {
           
            //静态栈
            R.id.bt_liststack_isempty -> {//是否为空
                Log.i("LinkTableActivity==", "" + listStack!!.isEmpty)
            }
            R.id.bt_liststack_topdata -> {//获取栈顶数据
                Log.i("LinkTableActivity==", "" + listStack!!.topData)
            }
            R.id.bt_liststack_put -> {//进栈
                listStack!!.pushStack(100)
                listStack!!.LogMess()
            }
            R.id.bt_liststack_out -> {//出栈
                listStack!!.outStack()
                listStack!!.LogMess()
            }
        }
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".javaknowledge.datastructure.LinkTableActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:gravity="center"
                android:text="关于静态栈的操作"
                android:textColor="#000000" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/bt_liststack_isempty"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:background="@color/unPass_color"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="是否为空"
                    android:textAllCaps="false"
                    android:textColor="@android:color/white" />

                <Button
                    android:id="@+id/bt_liststack_topdata"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:background="@color/unPass_color"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="获取栈顶元素"
                    android:textAllCaps="false"
                    android:textColor="@android:color/white" />


            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/bt_liststack_put"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:background="@color/unPass_color"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="进栈"
                    android:textAllCaps="false"
                    android:textColor="@android:color/white" />

                <Button
                    android:id="@+id/bt_liststack_out"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:background="@color/unPass_color"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="出栈"
                    android:textAllCaps="false"
                    android:textColor="@android:color/white" />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

运行效果:
原始数据: 0,1,2,3,4,5,
是否为空: false
栈顶数据: 5
进栈: 0,1,2,3,4,5,100,
栈顶数据: 100
出栈: 0,1,2,3,4,5,
出栈: 0,1,2,3,4,
出栈: 0,1,2,3,
出栈: 0,1,2,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值