动态链表队列--内存溢出异常-和边界溢出
来源:互联网 发布:linux 打包一个文件夹 编辑:程序博客网 时间:2024/05/29 16:23
public classListQueue {
static ListQueuelistfront;
static int front;
static ListQueuelistrear;
static int rear;
static{ //最初建立头队列节点
listfront=listrear=new ListQueue();
rear=0;
front=0;
}
// member of no-static
int[] date;
static final int MaxSize=100;
ListQueuenext;
public ListQueue(){
date=newint[MaxSize];
}
public void insertnumber(int number){
if(rear<(MaxSize-1)&&rear+1!=front){ //listrear尾节点索引的节点中还有空余内存存储数据
rear=rear+1;
listrear.date[rear]=number;
// System.out.println(listrear.date[rear]);
}
else if((rear==(MaxSize-1))&&(front==0)){//listfront头结点索引的节点没有空余内存
listrear.next=new ListQueue();
listrear=listrear.next;
listrear.next=listfront; //insert numberto rear.date;
rear=0;
listrear.date[rear]=number;
// System.out.println(listrear.date[rear]);
}
else if(rear==(MaxSize-1)&&front!=0){ //头结点中还有空余内存存储数据
listrear=listfront; //move list-rear,attention to that rear should be zero;
rear=0;
listrear.date[rear]=number;
// System.out.println(listrear.date[rear]);
}
else if((rear+1)==front&&listfront==listrear){ //在数组的中间出现队列满的情况
listfront=listrear.next;
listrear.next=new ListQueue();
listrear.next.next=listfront;
listfront=listrear.next; //申请一个新的头结点
for(int count=MaxSize-1;count>front;count--){ //讲原先头结点的数据复制到新的头结点中
listfront.date[count]=listrear.date[count];
}
rear=rear+1;
listrear.date[rear]=number;
// System.out.println(listrear.date[rear]);
}
}
intgetanddeletenumber(){ //和getnumber相同,主要区别在于front会向前移动达到对数据的删除操作
if(front==rear&&listfront==listrear){
//throw exception of empty queue
return 0;
}
if(front<MaxSize-1){
front=front+1;
returnlistfront.date[front];
}
else if(front==MaxSize-1&&listfront!=listrear){
listfront=listfront.next;
listrear.next=listfront;
front=0;
returnlistfront.date[front];
}
else{ //front==MaxSize-1&&listfront==listrear)
front=0;
returnlistfront.date[0];
}
}
int getnumber(){
if(front==rear&&listfront==listrear){ //空队列的判定
System.out.println("exception");
return 0;
//exception of empty queue;
}
else{ //为非空队列
if(front<MaxSize-1){ //头索引的下表不在节点数组的尾部,
// System.out.println(listfront.date[front+1]);
returnlistfront.date[front+1];
}
else if(front==MaxSize-1&&listfront!=listrear){ //遍历下个节点
ListQueuelistmid=listfront.next;
// System.out.println(listmid.date[0]);
return listmid.date[0];
}
else{ //(front==MaxSize-1&&listfront==listrear) //同一个节点的遍历
// System.out.println(listfront.date[0]);
returnlistfront.date[0];
}
}
}
void showalldate(){
if(front==rear&&listfront==listrear){ //判定是否为空队列
System.out.println("empty Queue");
//**
// 注意这里需要调用跑出个错误, 不是异常
}
else{
int mid=front+1; //遍历不能破坏原本的索引,需要额外的索引
ListQueuelistmid=listfront;
while(!(listmid==listrear&&mid==rear+1)){
if(listmid!=listrear){ //有多个节点队列的遍历
for(;mid<MaxSize;mid++){
System.out.println(listmid.date[mid]);
}
listmid=listmid.next;
mid=0;
}
else{ //只有一个节点的时候的遍历
for(;mid<=rear;mid++){
System.out.println(listmid.date[mid]);
}
}
}
}
}
}
public classhellojava {
public static void main(String[]args){
ListQueuemyqueue=newListQueue();
for(inti=88;i<321;i++){
myqueue.insertnumber(i);
}
myqueue.getnumber();
myqueue.showalldate();
}
}
- 动态链表队列--内存溢出异常-和边界溢出
- java内存区域和内存溢出异常
- Java内存区域和内存溢出异常
- Java内存区域和内存溢出异常
- java内存区域和内存溢出异常
- JVM内存区域和内存溢出异常
- JVM--内存区域和内存溢出异常
- 内存溢出异常解决方案
- java 内存溢出异常
- Java内存溢出异常
- Jenkins内存溢出异常
- 内存溢出:native溢出 和 上层溢出
- Java内存区域详述和内存溢出异常
- 【JVM】内存区域分配机制和内存溢出异常
- java 的JVM内存详解和内存溢出异常
- Java内存区域和内存溢出异常之一
- java内存区域和内存溢出异常--->171224
- java内存溢出异常(OutOfMemoryError)和栈溢出异常(StackOverflowError)
- 改变自己的133种方法
- libgdx input分析
- c语言中读取命令行参数
- 新xcode的literal syntax是什么
- iOS开发- UICollectionView详解+实例
- 动态链表队列--内存溢出异常-和边界溢出
- SharePoint 沙盒解决方案部署无法启动计算机服务SPUserCodeV4
- 数学—杭电1071 The area
- C#如何获得屏幕尺寸大小
- 判断一条直线到另一条直线所构成的角度是逆时针还是顺时针方向。
- ASP.NET中进行消息处理(MSMQ)
- ios学习推荐博客
- fillMode的意义
- android wear 的起步介绍, 搭建开发预览环境