通过链表实现栈(动态栈)的实现

通过链表实现栈

  • 栈的结构
public  class LinkTableStackText<T> {

    public class Node {
        private T t;
        private Node next;

        public Node(T t, Node next) {
            this.t = t;
            this.next = next;
        }

        public Node(T t) {
            this.t = t;
        }

    }

    public Node head;//头结点
    public int size;

    //构造函数
    public LinkTableStackText() {
        this.head = null;
        this.size = 0;
    }
}
  • 入栈
 //入栈
    public void pushStack(T t) {
        if (t == null) {
            throw new NullPointerException("参数不能为空");
        }
        if (head == null) {
            head = new Node(t);
            head.next = null;
            size++;
        } else {
            Node cur = this.head;
            head = new Node(t);
            head.t = t;
            head.next = cur;
            size++;
        }
    }

  • 出栈
 public void outStack() {
        head = head.next;
        size--;
    }
  • 获取栈顶元素
 //获取栈顶元素
    public T getTopData() {
        return head.t;
    }
  • 判断是否为空
 //判断是否为空
    public boolean isEmpty() {
        if (head == null) {
            return true;
        } else {
            return false;
        }
    }
java完整代码
public  class LinkTableStackText<T> {

    public class Node {
        private T t;
        private Node next;

        public Node(T t, Node next) {
            this.t = t;
            this.next = next;
        }

        public Node(T t) {
            this.t = t;
        }

    }

    public Node head;//头结点
    public int size;

    //构造函数
    public LinkTableStackText() {
        this.head = null;
        this.size = 0;
    }

    //入栈
    public void pushStack(T t) {
        if (t == null) {
            throw new NullPointerException("参数不能为空");
        }
        if (head == null) {
            head = new Node(t);
            head.next = null;
            size++;
        } else {
            Node cur = this.head;
            head = new Node(t);
            head.t = t;
            head.next = cur;
            size++;
        }
    }

    //出栈
    public void outStack() {
        head = head.next;
        size--;
    }

    //获取栈顶元素
    public T getTopData() {
        return head.t;
    }

    //判断是否为空
    public boolean isEmpty() {
        if (head == null) {
            return true;
        } else {
            return false;
        }
    }

    public String ToSting() {
        StringBuffer sb = new StringBuffer("");
        Node current = this.head;
        while (current != null) {
            sb.append(current.t + ",");
            current = current.next;
        }
        sb.append("NULL");
        return sb.toString();
    }

    /**
     * 打印
     */
    public void logMess() {
        Log.i("LinkTableActivity==", this.ToSting());
    }


}

xml

 <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_linktablestack_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_linktablestack_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_linktablestack_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_linktablestack_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>

activity

class LinkTableActivity : AppCompatActivity(), View.OnClickListener {
 
    //动态栈
    var linkTableStack: LinkTableStackText<Int>? = LinkTableStackText()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_link_table)
        init_Listener()

        initLinkTableStack()
    }

    fun init_Listener() {
        
        //动态栈
        bt_linktablestack_isempty.setOnClickListener(this)
        bt_linktablestack_topdata.setOnClickListener(this)
        bt_linktablestack_put.setOnClickListener(this)
        bt_linktablestack_out.setOnClickListener(this)
    }

  

    /**
     * 动态栈(链表实现栈)
     */
    fun initLinkTableStack() {
        //往链表内添加数据
        for (i in 0..5) {
            linkTableStack!!.pushStack(i)
        }
        linkTableStack!!.logMess()
    }


    override fun onClick(v: View?) {
        when (v?.id) {
     
            //动态栈
            R.id.bt_linktablestack_isempty -> {//是否为空
                Log.i("LinkTableActivity==", "" + linkTableStack!!.isEmpty)
            }
            R.id.bt_linktablestack_topdata -> {//栈顶数据
                Log.i("LinkTableActivity==", "" + linkTableStack!!.topData)
            }
            R.id.bt_linktablestack_put -> {//进栈
                linkTableStack!!.pushStack(100)
                linkTableStack!!.logMess()
            }
            R.id.bt_linktablestack_out -> {//出栈
                linkTableStack!!.outStack()
                linkTableStack!!.logMess()
            }


        }
    }
}

运行效果:

原始数据: 5,4,3,2,1,0,NULL
是否为空: false
栈顶数据: 5
入栈: 100,5,4,3,2,1,0,NULL
入栈: 100,100,5,4,3,2,1,0,NULL
入栈: 100,100,100,5,4,3,2,1,0,NULL
出栈: 100,100,5,4,3,2,1,0,NULL
出栈: 100,5,4,3,2,1,0,NULL

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值