zoukankan      html  css  js  c++  java
  • 大话数据结构(九)——栈

    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;
    		
    	}
    }
    

      

  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/snowwang/p/6074962.html
Copyright © 2011-2022 走看看