大话数据结构(九)——栈

1、栈的定义

栈(stack)是限定仅在表尾进行插入和删除操作的线性表

允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈,栈又称后进先出(Last In First Out)的线性表,简称LIFO结构。

注意:

1)栈是个线性表,栈元素具有线性关系,即前驱后继的关系。

2)它是一种特殊的线性表,只在表尾进行插入和删除,表尾指的是栈顶。

3)栈底是固定的,最先进栈的只能在栈底。

2、栈的操作

栈的插入操作,叫做进栈,也称压栈,入栈。

栈的删除操作,也做出栈,也叫弹栈。

3、栈的顺序存储结构及实现

栈的顺序存储结构一般用数组实现,下标为0的一端为栈底比较好,因为首元素都存在栈底,变化最小。所以让它作为栈底。

当栈存一个元素,top==0,因此通常把空栈的判定条件定为top=-1.

4、栈的顺序结构中进栈操作及出栈操作代码如下

public class Stack<E> {
   private ArrayList<E> list = new ArrayList<E>();
   private int size;
   /*
    * 进栈操作
    */
   public void push(E e){
       list.add(e);
       size++;
   }
   /*
    * 出站操作
    */
   public E pop(){
       E e = list.get(size-1);
       size--;
       return e;
   }
   public static void main(String args[]){
       Stack<Object> stack = new Stack<Object>();
       stack.push("lllll");
       stack.push("222222");
       for(int i=0;i<=stack.size;i++){
           System.out.println(stack.pop());
       }
       }
}

5、栈的链式存储结构实现

package com.aclie.dataStructe4.stack;

public class LinkStack {

	Node1 top;//栈顶
	Node1 cur;//栈顶后面一个结点
	int count;
	public void add(Object obj){
		if(top == null){//空栈
		top = new Node1(obj);//栈顶为新结点
		top.next1 = cur;//修改栈顶的后继
		count++;	
		}else{
			Node1 s =new Node1(obj);//要插入的新结点
			s.next1 = top;//插入的结点的后继
			cur = s.next1;//修改栈顶的后继
			top = s;//栈顶结点
			count++;
		}
	}
	public void delete(Object obj){
		if(top == null){
			System.out.println("无删除 的结点,此表为控栈");
		}
		if(count == 1){
			top = null;
			System.out.println("现在为空栈");
			count--;
		}
		if(count>=2){
			top = cur;
			cur = cur.next1;
			count--;
		}
	}
	public void print(Node1 node1){
		if(node1 == null){
			System.out.println("没有可打印的元素");
		}else{
			Node1 cur1 = node1;
			while(cur1 != null){
				System.out.println(cur1.data1);
				cur1 = cur1.next1;
			}
		}
	}
	public static void main(String args[]){
		LinkStack seqStack = new LinkStack();
		seqStack.add("oooooo");
		seqStack.print(seqStack.top);
		seqStack.add("wwwww");
		seqStack.add("eeeeee");
		seqStack.delete(seqStack.top);
		seqStack.print(seqStack.top);
		}
	
}
class Node1{
	Object data1;
	Node1 next1;
	public Node1(Object d1){
		this.data1 = d1;
		
	}
}

  

原文地址:https://www.cnblogs.com/snowwang/p/6074962.html