java中一个困扰我这种菜鸟的问题 求求高手们帮帮我,我要实现一个以数组方式的链栈,想了很长的时间不知道怎么实现,请高手们给点儿建议,感激不尽....!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实现一个以数组方式的链栈?不是很清楚你的意思,用LinkedList来实现栈比较方便些呵呵,可以把需求描述的清晰一些 栈用数组实现,要求自定义链表,不允许使用LinkedList....实现栈遍历,进栈,出栈,判空等操作.... 何必自己为难自己...还专门说不让用LinkedList? 我也不想为难自己,我也想用linkedlist调用几个函数完成它.....可是题目确实是这样的.....求求高手们帮帮我吧... 模仿linkedlist把你想用的方法实现一下,只是类中的存储结构是数组就行了,这个似乎不难吧 看看栈的API,只用把栈的那几个方法用数组实现就可以了,pop() .. push().. 先进后出,后进先出。最先入栈的就是加到数组[0],取就只能取 数组[length-1]的 ,套上循环。只能给你简单提提思想了。。很好实现的 可以参考LinkedList源代码。不过用数组写链栈我不太明白什么意思。我写过线形和链的,一个指针head指向栈顶,其他都按照链表的来写,一个数据结构里有值和指向下一个的指针。然后封装两个public的方法put()和get(),只能从栈顶插入和读取,然后相应的移动head。开始的时候head为空,在put和get里加入一个head为空的条件判断。要是用数据写线性的,就是把链表写成线性的,差不多。你说的我真是不知道怎么回事。 指针就是“对象的引用”了嘛~~不过java里的“引用”,修改了一些原来c里面指针不太合适的地方。我水平不高,你看看这样合不合你要求。用数组好象可以不用引用也可以,直接定义个栈顶head作为栈顶元素的下标就行。private int head = 0; //private int [] myLinkedList = new int[10];private int max = 10;public void put(int num){ if(head == 10){ …… } //这里可以仿照arraylist来写个可以自动扩充容量并且复制数据的函数 myLinkedList[head] = num; head++;}public int get(){ if(head == 0)return 0; //栈空返回 0 ,也可以自己定义 -1或者别的 head--; return myLinkedList[head+1];} 用linkedlist可以轻松实现堆栈和队列用放置第一个元素然后又取最后一个元素或第一个元素就可以实现堆栈和队列 你把LinkedList的源代码看看不就得了LinkedList的本质它还是数组实现的阿 设置为动态可扩容的数组嘛 :if(data.length-1]!=null){ //判断空间是否已满 Object[] ob = new Object[data.length+10]; //如果空间已满,则扩容 System.arraycopy(this.data,0,ob,0,this.data.length); this.data = ob; //让之前数组的引用指向扩容后的新数组; } class StackX{ private int maxSize; private long[]stackArray; private int top; public stackX(int s) { maxSize=s; stackArray=new Long[maxSize]; top=-1; } public void push(long j) { stackArray[++top]=j; } public long pop() { return stackArray[top--]; } public long peek() { return stackArray[top]; } public boolean isFull() { return (top==maxSize-1); } public boolean isEmpty() { return (top==-1); }} java程序加载皮肤包后,按钮边框去不掉 90%的JAVA程序员会搞错的题 log4j怎么实现给每个任务记录日志 java访问SQL server数据库出现了很怪的问题!急救! 大家的看書方法是什麼,我在看<core java>,看得很困難! 有深圳的朋友吗?请问深圳哪里有电子科技书店?? 请教高手这个“$”是什么东东呀??急急!!! 请问java里获得文件的创建日期。大小等的类(方法)是什么? 如何使用STDOUT来向系统执行命令? 这是什么错误? 一个类里面的定义对象可以是接口吗? 关于枚举的不解!!
不是很清楚你的意思,用LinkedList来实现栈比较方便些
呵呵,可以把需求描述的清晰一些
先进后出,后进先出。最先入栈的就是加到数组[0],取就只能取 数组[length-1]的 ,套上循环。
只能给你简单提提思想了。。很好实现的
不过用数组写链栈我不太明白什么意思。我写过线形和链的,
一个指针head指向栈顶,其他都按照链表的来写,一个数据结构里有值和指向下一个的指针。
然后封装两个public的方法put()和get(),
只能从栈顶插入和读取,然后相应的移动head。
开始的时候head为空,在put和get里加入一个head为空的条件判断。要是用数据写线性的,就是把链表写成线性的,差不多。你说的我真是不知道怎么回事。
不过java里的“引用”,修改了一些原来c里面指针不太合适的地方。
我水平不高,你看看这样合不合你要求。
用数组好象可以不用引用也可以,直接定义个栈顶head作为栈顶元素的下标就行。
private int head = 0; //
private int [] myLinkedList = new int[10];
private int max = 10;
public void put(int num){
if(head == 10){ …… } //这里可以仿照arraylist来写个可以自动扩充容量并且复制数据的函数
myLinkedList[head] = num;
head++;
}
public int get(){
if(head == 0)return 0; //栈空返回 0 ,也可以自己定义 -1或者别的
head--;
return myLinkedList[head+1];
}
用放置第一个元素
然后又取最后一个元素或第一个元素就可以实现堆栈和队列
LinkedList的本质它还是数组实现的阿
设置为动态可扩容的数组嘛 :
if(data.length-1]!=null){ //判断空间是否已满
Object[] ob = new Object[data.length+10]; //如果空间已满,则扩容
System.arraycopy(this.data,0,ob,0,this.data.length);
this.data = ob; //让之前数组的引用指向扩容后的新数组;
}
{
private int maxSize;
private long[]stackArray;
private int top;
public stackX(int s)
{
maxSize=s;
stackArray=new Long[maxSize];
top=-1;
}
public void push(long j)
{
stackArray[++top]=j;
}
public long pop()
{
return stackArray[top--];
}
public long peek()
{
return stackArray[top];
}
public boolean isFull()
{
return (top==maxSize-1);
}
public boolean isEmpty()
{
return (top==-1);
}
}