php 队列长度设置,原 用长度可变数组实现栈和队列

为什么要定义可变数组

因为数组的长度固定了的,不能增长,在现实生活中我们往往需要添加或修改内容,所以一般的数组满足不了我们的要求,需要定义一个长度可变的数组来让我们增加或修改其中的数据。

定义可变数组的思路

主要是可变,可变就意味的数组的长度是可以变化的,所以我们可以在开始定义一个长度为0的数组,之后每增加一个元素就增加一个数组长度,同样的,每删除一个就减少一个数组长度。数组的方法一般包括添加元素,删除元素,修改元素,查看元素,查看长度 。

packagecom.lfw.array;//自定义长度可变的数组

public classMyArray {//定义一个初始长度是0的数组,用来缓存数据

private String[] src = new String[0];/*** 添加数据的方法

*

*@params

* 表示要保存的元素*/

public voidadd(String s) {//定义一个新数组,长度是原数组长度+1

String[] dest = new String[src.length + 1];//将新元素放到新数组的最后一个位置

dest[dest.length - 1] =s;//将原数组中的数据按照下标顺序拷贝到新数组

for (int i = 0; i < src.length; i++) {

dest[i]=src[i];

}//将src指向新数组

src =dest;

}/*** 根据下标提取元素的方法

*

*@paramindex

* 要提取的元素的下标

*@return返回提取到的元素*/

public String get(intindex) {returnsrc[index];

}/*** 获得长度可变数组中元素个数[长度]

*

*@return返回元素个数*/

public intsize() {returnsrc.length;

}/*** 将新元素插入到指定位置

*

*@params

* 要插入的新元素

*@paramindex

* 要插入的位置*/

public void insert(String s, intindex) {if (index < 0 || index >=src.length) {//抛出异常对象

throw new IndexOutOfBoundsException("下标越界!");

}//定义一个新数组,长度是原数组长度+1

String[] dest = new String[src.length + 1];//将新元素放到指定位置

dest[index] =s;//将下标小于index的元素按照相同的下标位置拷贝到新数组

for (int i = 0; i < index; i++) {

dest[i]=src[i];

}//从原数组index位置开始,拷贝到新数组index+1的位置

for (int i = index; i < src.length; i++) {

dest[i+ 1] =src[i];

}

src=dest;

}/*** 删除指定位置的元素

*

*@paramindex

* 要删除的元素的下标*/

public void delete(intindex) {if (index < 0 || index >=src.length) {//抛出异常对象

throw new IndexOutOfBoundsException("下标越界!");

}//定义一个新数组长度是原数组长度-1

String[] dest = new String[src.length - 1];//将下标小于index的元素按下相同位置拷贝到新数组

for (int i = 0; i < index; i++) {

dest[i]=src[i];

}//将下标大于index的拷贝到新数组index-1的位置

for (int i = index + 1; i < src.length; i++) {

dest[i- 1] =src[i];

}

src=dest;

}/*** 修改指定位置的元素

*

*@paramindex

* 要修改的元素的下标

*@paramnewStr

* 修改后的元素值*/

public void modify(intindex, String newStr) {

src[index]=newStr;

}

}

栈的实现

栈最大的特点就是LIFO(Last Int First Out) 后进先出,栈的一般方法包括入栈,查看栈顶元素,弹出栈顶元素,判断栈是否为空。(用数组实现栈的时候,我们只需要对栈顶元素进行操作,所以我们可以认为入栈方法共和数组的添加元素方法是一样的,我们只需要注重后进先出这一特点对最后加入的元素进行操作)

packagecom.lfw.array;public class Stack {

Node head= null;//空的链表,头结点一定为null

Node last = null;//空的链表,尾结点也为null

int count = 0;//结点的个数,默认是0//将数据压入栈

public voidpush(E s) {

Node Object= newNode(s);//将新结点作为链表的新结点

Object.next =head;

head=Object;

count++;

}//查看栈顶的数据

publicE look() {if(head != null) {returnhead.data ;

}return null;

}//弹出栈顶的数据[移除]

publicE poll(){if(head != null) {

Node n=head;

head=head.next ;

n.next= null;

count--;returnn.data ;

}if (count == 0) {return null;

}return null;

}//获得栈的长度

public intsize(){returncount;

}//判断栈是否为空

public booleanisEmpty(){return count == 0;

}//定义一个内部类,表示结点类

classNode {

E data;//结点中的元素[数据]

Node next;//对下一个结点的引用

publicNode(E data) {this.data =data;

}

}

}

写一个主类调用一下

packagecom.lfw.array;public classTest {public static voidmain(String[] args) {

Stack sta= newStack();

sta.push("张三");

sta.push("李四");

sta.push("王五");

sta.push("赵六");

sta.push("唐七");while(!sta.isEmpty()) {

Object s2=sta.poll();

System.out.println("弹出栈顶元素为"+s2);

}

}

}

结果为

c84495b46e01033a32e7055ba04210ba.png

队列的实现

队列不同于栈,队列的特点是后进后出。代码如下

packagecom.lfw.array;public classQueue {private String[] src = new String[0];public voidadd(String s) {

String[] dest= new String[src.length + 1];

dest[dest.length- 1] =s;for (int i = 0; i < src.length; i++) {

dest[i]=src[i];

}

src=dest;

}publicString poll() {if (src.length == 0) {return null;

}

String s= src[0];

String[] dest= new String[src.length - 1];for (int i = 0; i < src.length - 1; i++) {

dest[i]= src[i+1];

}

src=dest;returns;

}public intsize() {returnsrc.length;

}public booleanisEmpty() {return src.length == 0;

}

}

同样的可以写一个主类调用一下

packagecom.lfw.array;public classTest {public static voidmain(String[] args) {

Queue eu= newQueue();

eu.add("张三");

eu.add("李四");

eu.add("王五");

eu.add("赵六");

eu.add("唐七");while(!eu.isEmpty()) {

Object s2=eu.poll();

System.out.println("弹出对列元素为"+s2);

}

}

}

结果如下

3bf39f48afa060f08d56ee7696ee368b.png

总结:其实用可变数组编写栈和数列时,就是要抓住栈和数列的特点,一个先进先出,一个后进后出,其实添加元素的方法都一样,只是取元素的时候不同,根据各自的特点编写不同的代码就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值