通过链表实现栈
- 栈的结构
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