队列和栈

 队列是一种特殊的线性表,只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。当队列中没有元素时,称为空队列。

对于队列这种结构,其操作很简单,主要有以下几种:

初始化队列:创建一个队列。

进队列:将一个元素添加到队尾(相当于到队列最后排队等候)。

出队列:将队头的元素取出,同时删除该元素,使后一个元素成为队头。

获取队列第1个元素:将队头的元素取出,不删除该元素(队头仍然是该元素)。

获取队列长度:根据队头、队尾计算出队列中元素的数量。

 数据结构_队列java源代码 

package com.struct.www;

/**
 * @author 丹青
 *
 */
public class Queue {
 //队列容量
 private int maxSize;
 //队列存储数组
 private long[]array;
 //队头"指针"
 private int front;
 //队尾"指针"
 private int rear;
 //队列元素个数
 private int numItem;
 /**
  * @param args
  */
 //构造函数
 Queue(int max){
  maxSize = max;
  array = new long[max];
  front = 0;
  rear = -1;
  numItem = 0;
 }
 //入队,插入元素
 public boolean insert(long value){
 //处理方式,如果队列未满,则可以顺利插入元素,返回true,否则插入队列不成功,返回false

 //个人认为这种处理方式是合适的,好比你去火车站排队,发现前面的人太多,你肯定会走掉的
  if(numItem<maxSize){
  if(maxSize-1==rear){
   rear=-1;
  }
  array[++rear]=value;
  numItem++;
  return true;
  }
  return false;
 }
 //出队,返回队头元素
 public long remove(){
     long result = array[front++];
     if(maxSize==front){
      front=0;
     }
     numItem--;
     return result;
 }
 //不出队,返回队头元素
 public long peekFront(){
  return array[front];
 }
 //判断队列是否为空
 public boolean isEmpty(){
  return (0==numItem);
 }
 //判断队列是否充满
 public boolean isFull(){
  return (maxSize==numItem);
 }
 //返回队列实际长度
 public int size(){
  return numItem;
 }
 //显示队列,从队列头到队列尾
 public void display(){
  //队列不会循环到数组头
  if(numItem<=maxSize-front){
     for(int i=0;i<numItem;i++){
       System.out.print(array[front+i]+" ");
      }
     System.out.println("");
     return;
  }else{
  //队列会循环到数组头
     for(int j=front;j<maxSize;j++){
       System.out.print(array[j]+" ");
     }
     for(int k=0;k<=rear;k++){
       System.out.print(array[k]+" ");
     }
     System.out.println("");}
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
     //测试队列数据结构
  Queue queue = new Queue(6);
  queue.insert(1);
  queue.insert(2);
  queue.insert(3);
  queue.insert(4);
  queue.insert(5);
  queue.insert(6);
  //下面的插入不成功
  queue.insert(7);
  queue.display();
  //移出两个元素再显示
  queue.remove();
  queue.remove();
  queue.display();
  //再插入三个元素然后显示,队列只能再插入两个元素
  queue.insert(1);
  queue.insert(2);
  queue.insert(3);
  queue.display();
 }

}

队列测试结果

1 2 3 4 5 6
3 4 5 6
3 4 5 6 1 2

 

 

栈是一种线性表的特殊表现形式,与队列的“先进先出”不同,栈是按照“后进先出”(Last In Firt Out,LIFO)的原则处理数据。

栈的基本操作只有两个:

1、入栈(Push):即将数据保存到栈顶。进行该操作前,先修改栈顶指针,使其向上移一个元素位置,然后将数据保存到栈顶指针所指的位置。

2、 出栈(Pop):即将栈顶的数据弹出,然后修改栈顶指针,使其指向栈中的下一个元素。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值