A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余松霖 黑马帝   /  2011-12-20 20:08  /  3011 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余松霖 于 2011-12-20 20:43 编辑

两种数据结构.我现在只知道两种数据结构的区别.
堆栈是先进后出.   队列先进先出.
但对这概念不是很清楚.  希望各位黑马详细解释下,最好能举例..谢谢

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

7 个回复

倒序浏览
祁焱 黑马帝 2011-12-20 20:17:41
沙发
特点:堆栈是先进后出.   队列先进先出.
操作上:队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。
举例:有底的容器可以看成是一个栈,水管就是一个典型的队列数据结构。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
祁焱 发表于 2011-12-20 20:17
特点:堆栈是先进后出.   队列先进先出.
操作上:队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈 ...

还是有点模糊.能代码举下例子么.谢谢
回复 使用道具 举报
java中堆栈的区别

1 相同点:都是RAM中存放数据的地方  
2 不同点:  
  a.栈:存取速度快,但大小生命周期固定,主要应用于基本数据类型(byte,int,long,float,double,char,boolean)  
  b堆:存取速度慢,但能动态分配内存,主要应用于对象(new方式建立)  
3 示例:  
  int a=1;  
  int b=1;  
  那么在栈中只有一个1,a和b同时指向它,因此节省内存空间。  
同理: 如果  
String x = "one";  
  String y= "one";  
  则 x == y 返回 true,  
如果 String x=new String("one");  
String y= new String("one");  
则 x==y 返回false,因为前一个存在栈里面,引用同一个“one”,而后者存放在堆里,分别建立对象。  
4 与C++比较,java自动垃圾回收机制,因此堆栈都由系统分配,而C++中堆有程序员分配,而栈由系统分配。

队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作
栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来,就好像你看到了一个丑人不可能今天的中饭还没吐出来就先把早饭吐出来了。  
堆是另外一回事,一种高级数据结构  

堆,就是一陀一陀的东西。头重脚轻不算堆,要上面小下面大才算一个堆。堆是一棵二叉树,满足下面的始终比上面的大。它和二叉查找树比较起来既有好的又有不好的:好的就是要想知道数据里的最小值时根本就不用找了,直接就是最顶上的那个了;不好的就是堆除了这个以外基本上不能做别的事了。除了最顶上的那个以外,你几乎没办法控制其余的部分。

楼主想看详细的可看看链接,自己也理解不太明白
http://topic.csdn.net/u/20081215/12/D52DF473-1325-4984-80FD-3040911A7AF6.html

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
队列和堆栈就是一种数据结构了,是一种存储数据的形式。
堆栈就是实现先进后出的数据结构,比如一个只有一个开口的瓶子,你把饼干(数据)从瓶口放入瓶子中,拿饼干也要从瓶口拿,而先放入的饼干最后才能取出。
队列就是实现先进先出的数据结构,比如一个两端都开口的瓶子,你把饼干从左端放入瓶子,拿饼干可以从右端拿出,先放入的饼干(数据)最先取出。
回复 使用道具 举报
这是一个小例子你可以参考一下
import java.util.ArrayDeque;
02        import java.util.Deque;
03         
04        public class IntegerStack {
05          private Deque<Integer> data = new ArrayDeque<Integer>();
06         
07          public void push(Integer element) {
08            data.addFirst(element);
09          }
10         
11          public Integer pop() {
12            return data.removeFirst();
13          }
14         
15          public Integer peek() {
16            return data.peekFirst();
17          }
18         
19          public String toString() {
20            return data.toString();
21          }
22         
23          public static void main(String[] args) {
24            IntegerStack stack = new IntegerStack();
25            for (int i = 0; i < 5; i++) {
26              stack.push(i);
27            }
28            System.out.println("After pushing 5 elements: " + stack);
29         
30            int m = stack.pop();
31            System.out.println("Popped element = " + m);
32         
33            System.out.println("After popping 1 element : " + stack);
34         
35            int n = stack.peek();
36            System.out.println("Peeked element = " + n);
37            System.out.println("After peeking 1 element : " + stack);
38          }
39        }

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
祁焱 黑马帝 2011-12-20 22:44:59
7#
余松霖 发表于 2011-12-20 20:24
还是有点模糊.能代码举下例子么.谢谢

你可以去下边这个网址看一下代码:
http://zhengweisincere.blog.163.com/blog/static/49844649201111802839795/
回复 使用道具 举报
陈帅雷 黑马帝 2011-12-21 13:20:29
8#
{:soso_e100:}路过,学习了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马