操作受限的线性表(栈与队列)

一、栈

  栈是一种只能在一端进行插入或删除操作的线性表。表中允许进行插入、删除的一端叫栈顶,另一端叫栈底。栈的特点是“先进后出”。

  栈中数据元素的逻辑关系呈线性关系,所有栈可以像线性表一样采用顺序存储结构进行存储,即分配一块连续的存储空间来存放栈中元素,并用一个变量指向当前栈顶元素以反映栈中元素的变化。采用顺序存储结构的栈叫做顺序栈。

栈操作的代码示例:

//栈
class MyStack {
    int[] stack;
    public MyStack(){
        stack = new int[0];
    }
    //入栈
    public void push(int number){
        //创建一个新数组
        int[] newStack = new int[stack.length+1];
        //将原数组中的元素复制到新数组中
        for (int i = 0;i < newStack.length-1;i++){
            newStack[i] = stack[i];
        }
        //入栈
        newStack[stack.length]=number;
        stack=newStack;
    }
    //出栈,取出栈顶元素
    public int pop(){
        try{
            if (stack.length==0){
                throw new Exception("stack is empty !");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        int number = stack[stack.length-1];
        int[] newStack = new int[stack.length-1];
        for (int i = 0;i < newStack.length;i++){
            newStack[i] = stack[i];
        }
        stack=newStack;
        return number;
    }
    //查看栈顶元素
    public int getTop(){
        return stack[stack.length-1];
    }
    //判断栈是否为空
    public boolean isEmpty(){
        return stack.length==0;
    }
}
public class MyStackTest {
    public static void main(String[] args) {
        MyStack ms = new MyStack();
        ms.push(6);
        ms.push(5);
        ms.push(4);
        ms.push(3);
        //取出栈顶元素
        System.out.println("取出的栈顶元素是 "+ms.pop());
        //查看栈顶元素
        System.out.println("现在的栈顶元素是 "+ms.getTop());
        System.out.println("栈是否为空:"+ms.isEmpty());
    }
}
2.队列

  队列简称队,它是一种操作受限的线性表,其限制是仅允许在表的一端进行插入操作,在另一端进行删除操作。插入操作的一端叫队尾,删除操作的一端叫队头。特点是先进先出。
  队列中元素的逻辑关系为线性关系,所以队列可以像线性表一样采用顺序存储结构,这样的队列称为顺序队。

class MyQueue{
	int[] queue;
	public MyQueue(){
		queue = new int[0];
	}
	//入队操作
	public void add(int number){
		int newQueue = new int[queue.length+1];
		for(int i=0;i<queue.length;i++){
			newQueue[i]=queue[i];
		}
		newQueue[queue.length]=number;
		queue = newQueue;
	}
	//出队操作
	public int poll(){
		int number = queue[0];
		int newQueue = new int[queue.length-1];
		for(int i = 0;i<newQueue.length;i++){
			newQueue[i] = queue[i+1];
		}
		queue = newQueue;
		return number;
	}
	//判断队列是否为空
	public boolean isEmpty(){
		return queue.length==0;
	}
}
public class QueueTest{
	public static void main(){
		MyQueue mq = new MyQueue();
		//元素入队列
		mq.add[7];
		mq.add[6];
		mq.add[5];
		//元素出队
        System.out.println(mq.poll());
        System.out.println(mq.poll());
        System.out.println(mq.poll());
        //判断队列是否为空
        System.out.println(mq.isEmpty());
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值