重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
参考代码和注释如下
创新互联建站长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为望花企业提供专业的成都网站设计、网站建设、外贸网站建设,望花网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
简单测试了下,如果有问题接着在讨论
public class Queue {
private int[] elements;
public static final int DEFAULT_CAPACITY =8;//默认长度8
private int size = 0;
public Queue() {
elements = new int[DEFAULT_CAPACITY];
}
public Queue(int capacity) {
elements = new int[capacity];
}
public void enqueue(int v) {
if (size = elements.length) {// 数组扩容
int[] temp = new int[elements.length * 2];
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp;
}
elements[size++] = v;
}
public int dequeue() {// 先进先出
if (empty()) {
throw new RuntimeException("异常");
}
int x = elements[0];// 先把第一个元素保存出来
// 左移一位
// int[] temp = new int[elements.length];
// System.arraycopy(elements,1, temp, 0, elements.length-1);
// elements = temp;
// 左移一位
for (int i = 0; i elements.length - 1; i++) {
elements[i] = elements[i + 1];
}
elements[elements.length - 1] = 0;// 外面一般访问不了elements 后面的元素可以不用归零,但是归零了感觉舒服点
size--;
return x;
}
public boolean empty() {
return size == 0;
}
public int getSize() {
return size;
}
}
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
JS中的数组提供了四个操作,以便让我们实现队列与堆栈!
小理论:
队列:先进先出
堆栈:后进先出
实现队列的方法:
shift:从集合中把第一个元素删除,并返回这个元素的值。
unshift: 在集合开头添加一个或更多元素,并返回新的长度
push:在集合中添加元素,并返回新的长度
pop:从集合中把最后一个元素删除,并返回这个元素的值。
这是原来老赵写的关于数组队列的代码,觉得有点问题,所以改了一下
1 // Usage:装载并运行函数
2 // 队列机制
3 var Resource = (function () {
4 var waitingCallbacks = [];
5 var execute = function (cb) {
6 setTimeout(function () {
7 cb(function () {
8 if (waitingCallbacks.length == 0) return;
9 execute(waitingCallbacks.shift());
10 });
11 }, 0);
12 };
13 var register = function (cb) {
14 if (waitingCallbacks.length == 0) {
15 execute(cb);
16 } else {
17 waitingCallbacks.push(cb);
18 }
19 }
20 return {
21 register: register,
22 state: 1
23 }
24 })();
原来代码中是
execute(waitingCallbacks.unshift());现在我改成了
execute(waitingCallbacks.shift());当你从集合中执行了函数后,它应该从集合中删除,而不是再添加,呵呵。
Java栈的实现
public
class
MyStack
{
//定义一个堆栈类
int[]
array;
//用int数组来保存数据,根据需要可以换类型
int
s_size;
//定义堆栈的宽度
public
MyStack(int
i){
//定义一个带参数构造器
array=new
int[i];
//动态定义数组的长度
s_size=0;
//堆栈的默认宽度为0
}
public
MyStack(){
//默认构造器
this(50);
//默认构造器可容纳50个元素
}
public
void
push(int
i){
//压栈
array[this.s_size]=i;
this.s_size++;
}
public
int
pop(){
//从堆栈中取元素,从栈顶开始取
if(this.s_size!=0){
int
t=array[s_size-1];
//用中间变量保存栈顶的元素
array[s_size-1]=0;
//取完元素该位置设为0
s_size--;
//栈的大小减1
return
t;
//返回栈顶元素
}else{
System.out.println("This
stack
is
empty");
//当栈为空时显示提示信息,返回0
return
0;
}
}
public
boolean
isEmpty(){
//判断栈是否为空
return
this.s_size==0;
}
public
int
top(){
//从栈顶取值,功能和
pop()
方法一样
if(!this.isEmpty()){
int
t=array[this.s_size-1];
array[this.s_size-1]=0;
this.s_size--;
return
t;
}else{
System.out.println("This
stack
is
empty!");
return
0;
}
}
public
void
printAll(){
//打印出堆栈中的所有元素的值,不是取出,元素依然在堆栈里
if(!this.isEmpty()){
for(int
i=this.s_size
-
1;i=0;i--){
System.out.println(array[i]);
}
}
}
//下面是测试代码
public
static
void
main(String[]
args){
MyStack
stack=new
MyStack();
stack.push(4);
stack.push(5);
stack.push(6);
stack.push(7);
//System.out.println(stack.isEmpty());
stack.printAll();
System.out.println("===========");
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
}
}