




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习情境3栈和队列3.1任务一栈3.2任务二队列3.3任务三整合栈和队列的操作栈和队列是两种特殊的线性表,线性表增加和删除操作的位置受到限制,如果插入和删除操作只允许在线性表的一端进行,则为栈;若插入和删除操作分别在线性表的两端进行,则为队列。因此,栈的特点是后进先出,队列的特点是先进先出。栈和队列在软件设计中广泛应用。由于栈和队列的操作比线性表更简单,完全可以利用线性表已经实现的操作来实现栈和队列的操作。为了让学习者能更多地学习Java操作的思想和方法,与学习情境2不同,本学习情境的程序实现中使用接口和泛型。3.1任务一栈3.1.1子任务1认识栈
1.栈栈(stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行。允许操作的一端称为栈顶(top),不允许操作的一端称为栈底(bottom)。栈中插入数据的操作称为入栈(push),删除数据的操作称为出栈(pop),没有数据的栈称为空栈,如图3-1所示。图3-1栈
2.栈的基本操作栈的操作比较简单,基本操作主要有判断栈是否为空、取出栈顶数据值(栈中的数据不变)、进栈和出栈。进栈使得栈中数据增加,出栈使得栈中数据减少。由于栈的插入和删除操作只允许在栈顶进行,每次入栈数据即成为当前栈顶数据,每次出栈数据是最后一个入栈数据,因此栈也称为后进先出(LastInFirstOut)表,就像一摞盘子放进一个尺寸稍大些的桶里,每次进出只能一只盘子放在最上面或者从最上面取走一只盘子,不能从中间插入或抽出。如图3-2所示,如果进栈是顺序A、B、C、D,全部进栈,再全部出栈,则出栈的顺序是D、C、B、A。图3-2进栈和出栈
3.定义栈的Java程序接口栈中的数据可以是任意数据类型。栈的基本类型操作有判断栈是否为空、进栈、出栈和取栈顶数据值等。与线性表不同,不能对栈顶以外的位置index进行插入或删除等操作。创建包,命名为ch3StackQueue,在ch3StackQueue包中创建描述栈操作的接口,并使用泛型,程序如下:packagech3StackQueue;publicinterfaceStack<E> //栈接口{
booleanisEmpty(); //判断是否空栈,若空栈则返回true
booleanpush(Edata); //数据data入栈,若操作成功则返回true
Epop(); //出栈,返回当前栈顶数据,若栈空则返回null
EgetTop(); //取栈顶数据值,未出栈,若栈空则返回null}3.1.2子任务2操作栈的顺序存储结构
1.顺序存储结构的栈采用顺序存储结构的栈称为顺序栈,操作菜单为:
【1-判断栈】【2-进栈】【3-出栈】【4-取栈顶数据】【5-显示栈所有数据】其中“5-显示栈所有数据”本来不是栈的基本操作,只是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的。操作菜单的程序代码参阅Menu.java中的SeqStackMenu()。
2.创建顺序栈类在ch3StackQueue包中创建SeqStack.java顺序栈类,value为存储栈的数据值,top为栈顶数据下标,空栈则top值为-1,创建带参数(栈容量)和无参构造方法(固定容量为100或其他值)。程序如下:publicclassSeqStack<E>implementsStack<E> //顺序栈类{privateObjectvalue[]; //存储栈的数据值
privateinttop; //top为栈顶数据下标
publicSeqStack(intcapacity) //带参构造方法,创建指定容量的空栈
{this.value=newObject[capacity];this.top=-1;}publicSeqStack() //默认构造方法,创建指定容量的空栈
{this(100);}}
3.顺序栈基本算法
(1)判断栈是否为空。中文描述算法: 如果栈空 返回真 否则 返回假用程序设计语言描述算法:
if(this.top==-1) returntrue else returnfalse;因为在Java中this.top==-1本身就是两个结果true或false,所以此处可以直接用一个语句代替上述四行程序:
returnthis.top==-1;这样程序更简洁。
(2)进栈。中文描述算法(如图3-3所示):如果栈满则扩充容量 栈的指针上移 将进栈数据赋值给栈单元图3-3顺序存储进栈操作
(3)出栈。中文描述算法(如图3-4所示):如果栈空则返回空取出栈顶数据栈的指针下移
(4)取出栈顶数据值。取出栈顶数据值,栈中的数据不变,此时指针不动即可。图3-4顺序存储出栈操作
(5)显示栈中各数据的内容。这不是栈的基本操作,而是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的,所以不能对top指针进行直接增减操作,可以将top值赋给一个变量i,读出栈中所有数据值。中文描述算法: 如果栈非空
top赋给i
从i到0将栈的数据值加到字符串str
返回串str
4.程序实现顺序栈顺序栈类SeqStack.java操作的完整代码如下:
packagech3StackQueue;
publicclassSeqStack<E>implementsStack<E> //顺序栈类
{
privateObject[]value; //存储栈的数据值
privateinttop; //top为栈顶数据下标
publicSeqStack(intcapacity) //带参构造方法,创建指定容量的空栈
{
this.value=newObject[capacity];
this.top=-1;
}publicSeqStack() //默认构造方法,创建指定容量的空栈
{this(100);}publicbooleanisEmpty() //判断是否空栈,若空栈则返回true{returnthis.top==-1;}
publicbooleanpush(Edata) //数据data入栈,若操作成功则返回true{if(data==null){returnfalse; //空对象(null)不能入栈
}if(this.top==value.length-1) //若栈满,则扩充容量
{Object[]temp=this.value;this.value=newObject[temp.length*2];for(inti=0;i<temp.length;i++){
this.value[i]=temp[i];}}this.top++;this.value[this.top]=data;returntrue;}
publicEpop()
//出栈,返回当前栈顶数据,若栈空则返回null{if(!isEmpty()){return(E)this.value[this.top--];}else{returnnull;}}
publicEgetTop()
//取栈顶数据值,未出栈,栈顶数据未改变
{if(!isEmpty()){return(E)this.value[this.top];}else{returnnull;}}@OverridepublicStringtoString() //返回栈中各数据的字符串
{Stringstr="[";if(this.top!=-1){str+=this.value[this.top].toString();}
for(inti=this.top-1;i>=0;i--){
str+=","+this.value[i].toString();}returnstr+"]";}}3.1.3子任务3操作栈的链式存储结构
1.链式存储结构的栈采用链式存储结构的栈称为链栈,操作菜单与顺序存储一样:
【1-判断栈】【2-进栈】【3-出栈】【4-取栈顶数据】【5-显示栈所有数据】同样,“5-显示栈所有数据”本来不是栈的基本操作,只是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的。操作菜单的程序代码参阅Menu.java中的linkStackMenu()。
2.创建链式存储栈类
(1)在ch3StackQueue包中创建链式存储的单链表节点类Node.java,data为数据域,用于保存栈的数据,next为地址域,引用后继节点。程序代码如下://单链表节点类packagech3StackQueue;publicclassNode<E> //单链表节点类{privateEdata;
//数据域,保存数据
privateNode<E>next; //地址域,引用后继节点
publicNode(Edata,Node<E>next) //构造节点,指定数据和后继节点
{this.data=data;this.next=next;}publicNode(Edata) //构造节点,指定数据,后继节点为空
{this(data,null);}publicNode() //构造节点,数据和后继节点均为空
{this(null,null);}publicStringtoString() //返回节点数据值对应的字符串
{returnthis.getData().toString();}publicEgetData(){returndata;}publicvoidsetData(Edata){this.data=data;}publicNode<E>getNext(){returnnext;}publicvoidsetNext(Node<E>next){this.next=next;}}
(2)在ch3StackQueue包中创建LinkStack.java链栈类,使用节点类Node构造栈顶数据top,并创建LinkStack()构造方法,程序代码如下:
publicclassLinkStack<E>implementsStack<E> //链式栈类
{
privateNode<E>top;
publicLinkStack() //构造空栈
{
this.top=null; //栈顶节点
}
}
3.链式存储结构的栈基本算法
(1)判断栈是否为空。算法:如果栈顶数据top==null则栈为空
(2)进栈。链式存储结构的出栈如图3-5所示。图3-5链式存储进栈操作算法: 构造新节点(指向栈顶)
栈顶引用指向新节点如果链式存储栈底节点作为头节点,如图3-6所示,则进栈操作算法:先构造新节点,新节点引用为空栈顶节点的引用指向新节点头节点引用指向新节点这样算法每次进栈前都要从栈底通过引用到寻找栈顶节点,再进行进栈操作,消耗时间,出栈类似,所以本教程的程序采用图3-5所示的操作。图3-6链式存储栈底为头节点
(3)出栈。链式存储结构的出栈如图3-7所示。中文描述算法:如果栈空则返回空 取出栈顶数据栈顶引用指向其下一个数据(Java垃圾自动回收机制会处理原来栈顶的数据)
(4)取出栈顶数据值。取出栈顶数据值,栈中的数据不变,此时栈顶的引用不变。图3-7链式存储出栈操作
(5)显示栈中各数据的内容。这不是栈的基本操作,而是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的,所以不能对top引用进行直接移动操作,可以将top引用值赋给一个临时引用p,若p非空则循环读出栈中所有数据值。中文描述算法: 栈顶引用赋给临时引用如果临时引用非空将栈的数据值加到字符串str临时引用指向其下一个数据 返回串str
4.程序实现链式存储栈链式存储栈类LinkStack.java操作的完整代码如下:
packagech3StackQueue;
publicclassLinkStack<E>implementsStack<E> //链式栈类
{
privateNode<E>top;
publicLinkStack() //构造空栈
{
this.top=null; //栈顶节点
}
publicbooleanisEmpty() //判断是否空栈
{
returnthis.top==null;
}
publicbooleanpush(Edata) //数据data入栈,若操作成功则返回true
{
if(data==null)
returnfalse; //空对象(null)不能入栈
//在原栈顶之前插入节点作为新的栈顶节点
this.top=newNode(data,this.top);
returntrue;
}
publicEpop() //出栈,返回当前栈顶数据,若栈空则返回null{if(!isEmpty()){Etemp=this.top.getData(); //取得栈顶节点值
this.top=this.top.getNext(); //删除栈顶节点
returntemp;}returnnull;}
publicEgetTop() //取栈顶数据值,未出栈,若栈空则返回null{if(!isEmpty())returnthis.top.getData();returnnull;}@OverridepublicStringtoString() //返回栈中各数据的字符串描述
{Stringstr="[";Node<E>p=this.top;while(p!=null)
{str+=p.getData().toString();p=p.getNext();if(p!=null)str+=",";}returnstr+"]";}}3.2任务二队列3.2.1子任务1认识队列
1.队列(queue)队列是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。在队列某一端插入数据称为入队(enqueue);在另外一端删除数据的过程称为出队(dequeue)。允许入队的一端称为后端或队尾(rear),允许出队的一端称为前端或队头(front)。没有数据的队列称为空队列。队列如图3-8所示。图3-8队列
2.队列的基本操作队列的操作也比较简单,基本操作主要有判断队列是否为空、进队、出队和显示队头数据等。进队列使得队列中的数据增加,出队列使得队列中的数据减少。由于队列的插入和删除操作只允许在队列的两端进行,每次入队列数据即成为当前队尾数据,每次出队列数据是最早入队的数据,因此队列也称为先进先出(FirstInFirstOut)表,就像火车经过中途站台,先进入站台的车厢先离开站台一样。如图3-8所示,如果进队的顺序是A、B、C,则出队列的顺序是A、B、C。
3.定义队列的Java程序接口队列中的数据可以是任意数据类型。队列的基本类型操作有判断队是否为空、进队、出队和取队头数据值等。与普通线性表不同,不能对队尾以外的位置index进行插入操作或队头以外的位置index进行删除操作。在ch3StackQueue包中创建描述队操作的接口Queue.java,并使用泛型,程序如下:
packagech3StackQueue;
publicinterfaceQueue<E> //队列接口
{
booleanisEmpty();//判断队列是否为空,若空则返回true
booleanenQueue(Eelement); //数据element入队,若操作成功则返回true
EdeQueue(); //出队,返回当前队头数据,若队列空则返回null
EgetFront(); //取队头数据值,未出队,若队空则返回null
}3.2.2子任务2操作队列的顺序存储结构
1.顺序存储结构的队列采用顺序存储结构的队称为顺序队,操作菜单为:
【1-判断队空】【2-进队】【3-出队】【4-显示队头数据】【5-显示队所有数据】“5-显示队所有数据”本来不是队的基本操作,只是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的。操作菜单的程序代码参阅Menu.java中的seqqueueMenu()。
2.创建顺序队列类在ch3StackQueue包中创建SeqQueue.java顺序队类,value为存储队的数据值,front为队头数据的下标,rear为队尾数据的下标,空队则front等于rear,创建带参数(队容量)和无参构造方法(固定容量为100或其他值)的队。程序代码如下:
packagech3StackQueue;
publicclassSeqQueue<E>implementsQueue<E> //顺序循环队列类
{
publicObject[]value; //存储队列的数据
publicintfront,rear; //front、rear为队列头、尾下标
publicSeqQueue(intcapacity) //构造指定容量的空队列
{
this.value=newObject[capacity];
this.front=this.rear=0;
}
publicSeqQueue() //构造默认容量的空队列
{
this(100);
}
}
3.顺序队列基本算法
(1)判断队是否为空。中文描述算法: 如果队空(front等于rear)
返回真 否则 返回假
(2)进队。中文描述算法(如图3-9所示):如果队满则扩充容量 队尾的指针加1图 将进队数据赋值给队尾存储单元图3-9顺序存储队列的进队操作
(3)出队。中文描述算法(如图3-10所示):如果队空则返回空 取出队头数据队的指针加1
(4)取出队头数据值。取出队头数据值,队中的数据不变,此时指针不改变即可。3-10顺序存储队列的出队操作
(5)显示队中各数据的内容。这不是队的基本操作,将队头front值赋给一个变量i,从i开始到队尾rear读出队中所有数据值。中文描述算法: 如果队非空
front赋给i
从i到rear将队的数据值加到字符串str
返回串str
4.程序实现顺序队列顺序队类SeqQueue.java操作的完整代码如下:
packagech3StackQueue;
publicclassSeqQueue<E>implementsQueue<E>//顺序循环队列类
{
publicObject[]value; //存储队列的数据
publicintfront,rear; //front、rear为队列头、尾下标
publicSeqQueue(intcapacity)//构造指定容量的空队列
{
this.value=newObject[capacity];
this.front=this.rear=0;
}
publicSeqQueue() //构造默认容量的空队列
{
this(100);
}
publicbooleanisEmpty()
//判断队列是否空,若空则返回true
{
returnthis.front==this.rear;
//
}
publicbooleanenQueue(Edata) //数据data进队,若操作成功则返回true
{
if(data==null){
returnfalse; //空对象(null)不能进队
}if(this.front==(this.rear+1)%this.value.length){//若队列满,则扩充容量
Object[]temp=this.value;this.value=newObject[temp.length*2];inti=this.front,j=0;while(i!=this.rear) //按队列数据次序复制数组数据
{this.value[j]=temp[i];i=(i+1)%temp.length;j++;}this.front=0;this.rear=j;}
this.value[this.rear]=data; //this.rear=(this.rear+1)%this.value.length;returntrue;}publicEdeQueue() //出队,返回当前队头数据,若队列空则返回null{if(!isEmpty())//队列不空
{Etemp=(E)this.value[this.front]; //取得队头数据
this.front=(this.front+1)%this.value.length;returntemp;}returnnull;}publicEgetFront(){if(!isEmpty()){ //队列不空
Etemp=(E)this.value[this.front]; //取得队头数据
returntemp;}else{returnnull;}}@OverridepublicStringtoString() //返回队列中各数据的字符串描述
{Stringstr="[";if(!isEmpty()){str+=this.value[this.front].toString();inti=(this.front+1)%this.value.length;while(i!=this.rear){str+=","+this.value[i].toString();i=(i+1)%this.value.length;}}returnstr+"]";}}3.2.3子任务3操作栈的链式存储结构
1.链式存储结构的队列采用链式存储结构的队列称为链式队列,操作菜单为:
【1-判断队空】【2-进队】【3-出队】【4-显示队头数据】【5-显示队所有数据】与顺序存储结构的队操作一样,“5-显示队所有数据”本来不是链队的基本操作,只是为了使得程序操作中可以更全面地查看操作结果是否正确而增加的。操作菜单的程序代码参阅Menu.java中的linkqueueMenu()。
2.创建链式队列类在“3.1.3子任务3操作栈的链式存储结构”中已经创建链式存储的单链表节点类Node.java,data为数据域,用于保存栈的数据,next为地址域,引用后继节点。链式节点可以用于链式栈和链式队列,所以这里可以使用该Node类。在ch3StackQueue包中创建LinkQueue.java链式队类,front和rear分别指向队头和队尾节点,空队则front和rear都为null,构造空队列就是front和rear都赋值为null。定义LinkQueue.java链式队类的代码如下:
packagech3StackQueue;
publicclassLinkQueue<E>implementsQueue<E> //链式队列类
{
privateNode<E>front,rear; //front和rear分别指向队头和队尾节点
publicLinkQueue() //构造空队列
{
this.front=this.rear=null; }
}
3.链式队列基本算法
(1)判断队是否为空。中文描述算法: 如果队空(front和rear均为null)
返回真 否则 返回假
(2)进队。中文描述算法(如图3-11所示):创建新节点如果队空则队头和队尾均指向新节点 否则 队尾引用指向新节点图3-11链式存储队列的进队操作
(3)出队。中文描述算法(如图3-12所示):如果队空则返回空 取出队头数据队头的引用指向其下一个节点
(4)取出队头数据值。取出队头数据值,队中的数据不变,此时队头的引用不改变即可。图3-12链式存储队列的出队操作
(5)显示队中各数据的内容。这不是队的基本操作,将队头front引用赋给一个临时引用p,从p开始到队尾rear读出队中所有数据值。中文描述算法: 如果队非空
front引用赋给一个临时引用p
从p到rear将队的数据值加到字符串str
返回串str
4.程序实现链式队列链式队列类LinkQueue.java操作的完整代码如下:
packagech3StackQueue;
publicclassLinkQueue<E>implementsQueue<E> //链式队列类
{
privateNode<E>front,rear; //front和rear分别指向队头和队尾节点
publicLinkQueue() //构造空队列
{
this.front=this.rear=null;
}
publicbooleanisEmpty() //判断队列是否空,若空则返回true{returnthis.front==null&&this.rear==null;}publicbooleanenQueue(Edata) //数据data入队,若操作成功则返回true{if(data==null){returnfalse; //空对象(null)不能入队
}Node<E>newnode=newNode(data);if(!isEmpty()) //队列不空时{this.rear.setNext(newnode);
//q节点作为新的队尾节点
}else{this.front=newnode;}this.rear=newnode;returntrue;}
publicEdeQueue() //出队,返回当前队头数据,若队列空则返回null{if(!isEmpty()){Etemp=this.front.getData(); //取得队头数据
this.front=this.front.getNext(); //删除队头节点
if(this.front==null){this.rear=null;}returntemp;}else{returnnull;}}
publicEgetFront(){if(!isEmpty()){Etemp=this.front.getData(); //取得队头数据
returntemp;}else{returnnull;}}@OverridepublicStringtoString() //返回栈中各数据的字符串描述
{Stringstr="[";Node<E>p=this.front;while(p!=null){str+=p.getData().toString();p=p.getNext();if(p!=null){str+=",";}}returnstr+"]";}}3.3任务三整合栈和队列的操作本学习情境介绍了栈和队列的顺序存储和链式存储的操作,共有四类基本操作:栈的顺序存储操作、栈的链式存储的操作、队列的顺序存储操作、队列的链式存储的操作,四类操作又有五种基本具体操作,比较整齐划一,可以把这四类操作整合在一起。这需要构造两级操作菜单系统,第一级操作菜单如下:选择其中一项目菜单后,进入各自的二级菜单操作,在前面的各任务中都已经介绍菜单项和操作实现,所以本任务只要做出主程序菜单即可。3.3.1子任务1构造主程序
1.构造栈和队列实现的主程序由于栈和队列在一级操作菜单下具有四个二级菜单,所以可以把菜单抽取出来作为一个Menu类,而构造主程序只需调用菜单类即可,先构造主程序如下:
packagech3StackQueue;
publicclassMain{
publicstaticvoidmain(String[]args){
}
}等“3.3.2子任务2构造菜单程序”完成后再转回下面的“2.主程序Main.java完整代码”,调用菜单类的主菜单即可实现完整系统。
2.主程序Main.java完整代码
packagech3StackQueue;
publicclassMain{
publicstaticvoidmain(String[]args){
Menumenu=newMenu(); //创建主菜单对象
menu.mainMenu(); //调用主菜单方法
}
}3.3.2子任务2构造菜单程序
1.构造一级菜单与学习情境2中的线性表菜单构造类似,先构造一级菜单。详细代码见Menu.java。
2.构造二级菜单构造四个二级菜单的方法包括:栈的顺序存储结构操作seqstackMenu()、栈的链式存储结构操作linkStackMenu()、队的顺序存储结构操作seqqueueMenu()、队的链式存储结构操作linkqueueMenu()。详细代码见Menu.java。3.栈和队操作菜单Menu.java完整代码
packagech3StackQueue;
importjava.util.Scanner;
publicclassMenu{
Scannerinput=newScanner(System.in);
Stringdata;publicvoidmainMenu()//主菜单
{intselect;do{System.out.print("\n\n");System.out.print("\t\t☆★☆栈和队操作主菜单☆★☆\n");System.out.print("\n");System.out.print("\t【1-栈的顺序存储结构】");System.out.print("\t【2-栈的链式存储结构】\n");System.out.print("\t【3-队的顺序存储结构】");System.out.print("\t【4-队的链式存储结构】\n");System.out.print("\t\t\t【5-退出】\n");System.out.print("\n");System.out.print("\t请选择:");
select=input.nextInt();switch(select){case1:seqstackMenu();break;case2:linkStackMenu();break;case3:seqqueueMenu();break;case4:linkqueueMenu();break;case5:System.out.println("\t^_^感谢您的使用^_^\n");System.out.print("\t欢迎下次使用\n");System.out.print("\t再★見\n");System.exit(0);break;default:continue;}}while(true);}publicvoidseqstackMenu() //栈的顺序存储结构操作菜单
{SeqStack<String>seqstack=newSeqStack<String>();intselect=0;do{System.out.print("\n");System.out.print("\t\t☆★☆栈的顺序存储结构的操作菜单☆★☆\n");System.out.print("\n");System.out.print("\t【1-判断栈】【2-进栈】");System.out.print("\t【3-出栈】【4-取栈顶数据】");System.out.print("\t【5-显示栈所有数据】\n");System.out.print("\t【6-返回上一级菜单】\n");System.out.print("\n请选择:");
select=input.nextInt();switch(select){case1:if(seqstack.isEmpty()==true){System.out.println("\t栈为空!");}else{System.out.println("\t栈中有数据!");}break;case2:System.out.print("\t输入要进栈的数据:");data=input.next();seqstack.push(data);System.out.print("\t进栈数据为:"+data+"\n");break;
case3:System.out.println("\t出栈数据为:"+seqstack.pop());break;case4:System.out.println("\t栈顶数据为:"+seqstack.getTop());break;case5:System.out.println("\t栈顶"+seqstack.toString()+"栈底");
break;case6:mainMenu();break;default:continue;}}while(true);}//栈的顺序存储操作菜单结束
publicvoidlinkStackMenu()//栈的链式存储结构操作菜单
{LinkStack<String>linkstack=newLinkStack<String>();intselect;
do{System.out.print("\n");System.out.print("\n");System.out.print("\t\t☆★☆栈的链式存储结构的操作菜单☆★☆\n");System.out.print("\n");System.out.print("\t【1-判断栈】【2-进栈】");System.out.print("\t【3-出栈】【4-取栈顶数据】");System.out.print("\t【5-显示栈所有数据】\n");
System.out.print("\t【6-返回上一级菜单】\n");System.out.print("\n\n\t请选择:");select=input.nextInt();switch(select){case1:if(linkstack.isEmpty()==true){System.out.println("\t栈为空!");}else{System.out.println("\t栈中有数据!");}break;
case2:System.out.print("\t输入要进栈的数据:");data=input.next();linkstack.push(data);System.out.print("\t进栈数据为:"+data+"\n");break;case3:System.out.println("\t出栈数据为:"+linkstack.pop());break;case4:System.out.println("\t栈顶数据为:"+linkstack.getTop());break;
case5:System.out.println("\t栈顶"+linkstack.toString()+"栈底");break;case6:mainMenu();break;default:continue;}}while(true);
}//栈的链式存储操作菜单结束publicvoidseqqueueMenu()//队的顺序存储结构操作菜单
{SeqQueue<String>seqqueue=newSeqQueue<String>(5);intselect;do{System.out.print("\n");System.out.print("\n");System.out.print("\t\t☆★☆队的顺序存储结构的操作菜单☆★☆\n");System.out.print("\n");System.out.print("\t【1-判断队空】【2-进队】");System.out.print("\t【3-出队】【4-显示队头数据】");System.out.print("\t【5-显示队所有数据】\n");System.out.print("\t【6-返回上一级菜单】\n");System.out.print("\n请选择:");select=input.nextInt();switch(select){case1:if(seqqueue.isEmpty()){System.out.println("\t队为空!");}else{System.out.println("\t队中有数据!");}break;case2:System.out.print("\t输入要进队的数据:");data=input.next();seqqueue.enQueue(data);System.out.print("\t进队数据为:"+data+"\n");break
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源智能电网项目合作框架协议
- 电子废物回收处理项目合同
- 水管采购合同
- 热泵供暖设备采购合同
- 重庆简单房屋租赁合同(31篇)
- 电子商务平台卖家权益保护协议
- 自愿送养收养协议书
- 年度活动策划与执行工作方案
- 智能照明节能改造项目合作协议
- 封山育林施工合同
- GB/T 19342-2024手动牙刷一般要求和检测方法
- SLT824-2024 水利工程建设项目文件收集与归档规范
- 2024年山东铁投集团招聘笔试参考题库含答案解析
- (完整word版)中国银行交易流水明细清单模版
- DB43∕T 859-2014 高速公路机电工程概预算编制办法及定额
- 燃气轮机LM2500介绍
- (精选)浅谈在小学数学教学中如何进行有效提问
- 堆垛机速度计算表
- 净土资粮——信愿行(11)第六讲净业三福变化气质
- 服务体系流程图【精选文档】
- 北京市住房租赁指导价格说明(正式版)
评论
0/150
提交评论