通过数组实现栈
- 栈的结构
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,