读书人

什么是链表多谢各位!(终于可以给高

发布时间: 2012-03-06 20:47:55 作者: rapoo

高分求教什么是链表,谢谢各位!(终于可以给高分了,呵呵~~~)
我想请教什么是链表,我有一些编程的基础,我了解数组,但是链表这个东东我实在是搞不懂,能否请各位给举个例子,或用一些代码来实现,在下高分求教,多谢~~~

顺便问下:我今天刚刚注册,是朋友推荐的。怎么我在发帖时的“帖子问题点数”这一栏只能给“0”分呢?我明明有200可用分呀。

[解决办法]
链表就是在所分的存储区域中把他分成两块,一个事数据域,一个是指针域,指针域就是用来指向下一个存储块的,就好像两个物体之间的一条线把他们连接起来,而数组时一块连续的区域不用指针连接
[解决办法]
好比一群馒头 馒头LZ应该吃过哦?

馒头有2个内容 一个就是外面的皮 一个就是里面的肉

链表就是一群串起来的馒头 馒头的皮 就好像是数据 而馒头的里面的肉就好比是一个线索 里面记录着可以找到下一个馒头的地址

具体来说 你在一个食堂吃馒头 皮吃完了 发现里面写着“下一个馒头在1号教学楼205”
然后你跑到 1号教学楼205 发现里面还真的有一个一模一样的馒头 然后你又吃啊
吃完皮了 发现里面写着 “下一个馒头在2号教学楼物理实验室”

....
....

然后就是一个大大的循环 也就是说 你找到了第一个馒头 你可以把学校里面的所有馒头都找到并且吃掉
[解决办法]
链接这个地址有定义,有代码,单链表删除插入,双向链表删除插入
http://xiaoerlanglaile.blog.sohu.com/120427163.html
[解决办法]
数组在内存中是顺序存储的,可以顺序访问。
链表在内存中不是顺序存储的,它通过指针存储着下一个元素的地址,从而构成一个链。
[解决办法]

Java code
import java.util.*;class Node{ static int num = 1; double data; Node next; Node prep; Node(double ddata,Node nnext,Node pprep) {  data = ddata;  next = nnext;  prep = pprep; } Node(double ddata,Node k,int sign) //0为前,1为后 {  data = ddata;  if(sign == 0)  {   this.prep = k;   k.next = this;   this.next = null;      k = Listoper.MoveNodeNex(k);  }  else  {   this.next = k;   k.prep = this;   this.next = null;   k = Listoper.MoveNodePre(k);  } } Node(double ddata) {  data = ddata;  next = null;  prep = null; } Node() {  data = 0;  next = null;  prep = null; } static boolean MakeEmpty(Node Me) {  Me.data = 0;  Me.next = null;  Me.prep = null;  Me = null;    if(Me == null)   return true;  return false; }  void display() {  System.out.println("节点"+num+"的值为:"+"["+data+"]");  num++; }}class Listoper{ static void InsertNode(Node ListLoc,Node WorkNode)  //将节点WorkNode 插入在节点ListLoc前面。 {       WorkNode = ListLoc.prep.next;  WorkNode.prep = ListLoc.prep;   ListLoc.prep = WorkNode;  WorkNode.next = ListLoc; } static boolean DeleteNode(Node ListHead,int ddata) //将和ddata相同数据项的节点在链表中删除 {  while(ListHead.data != ddata && ListHead != null)  {   ListHead = ListHead.next;  }  if(ListHead == null)  {   return false;  }  Node p = new Node();  p = ListHead;  p.prep.next = p.next;  p.next.prep = p.prep;    if(Node.MakeEmpty(p) == true)   System.gc();  else  {   System.out.println("memory error!");  }  return true; } static void DisplayList(Node Llist)    //打印出链表中各个节点 {  while(Llist != null)  {   Llist.display();   Llist = Llist.next;  } } static Node MoveNodePre(Node p)         //对链表中当前节点进行前后移位的操作 {  return p.prep; } static Node MoveNodeNex(Node p) {  return p.next; }}public class ABC{ public static void main(String[] args) {  int i;  Random Rdata = new Random();  Node head = new Node(Rdata.nextDouble()*100);  Node p = head;  for(i = 2; i < 10; i++)  {   p = new Node(Rdata.nextDouble()*10000,p,0);  }  Listoper.DisplayList(head); }}
[解决办法]
链表和数组有相同地方也有不同的地方
相同之处:都是为了存储数据 那有了数组为什么还要链表呢
因为 链表在存贮空间中不需要空间的存贮位置是连续的
那它怎么才能保证空间不连续的彼此相连呢
因为链表包含两个区域 一个是数据区,一个是指针区,指针区就是来保证链表中个每个单位彼此之间的
联系的
[解决办法]
链表是数据结构的一种
链表的节点包括数据域和指针域
[解决办法]
/**
* @(#)MyLinkedList.java
*
*自定义的LinkedList


* @author
* @version 1.00 2009/10/12
*/
//节点类
class Node{
//数据区域
public Object data;
//地址区域
public Node next;

public Node(){
}

public Node(Object data){
this.data = data;
}

}

public class MyLinkedList {
//头节点
private Node header;
//尾节点
private Node tailer;

//记录当前元素个数
private int size;

public MyLinkedList(){
header = new Node();
header.next = header;
tailer = header;
size = 0;
}

public int size(){
return size;
}

// 将指定元素追加到此列表的结尾。
public void add(Object o) {
//1.出现一个新的节点
Node newNode = new Node(o);

//2.原尾节点指向新的节点
tailer.next = newNode;

//3.新节点称为新的尾节点
tailer = newNode;

size ++;
}

//返回此列表中指定位置处的元素。
public Object get(int index) {
//指定当前元素索引号
int count = 0;

//设定游标
Node currentNode = header;
Object obj = null;

for(int i = 0;i < size;i++){
//1.当前游标移动一个位置
currentNode = currentNode.next;
if(count == index){
//如果当前的索引等于指定的索引号
obj = currentNode.data;
break;
}
count++;
}

return obj;





}




}
[解决办法]
这个问题不应该给那么多高分啊!

随便Google一下!

就能得到很多详细的解释

这个问题 要学习深入,靠这里的帖子是不行的!

搜索一本经典的数据结构好好看看吧!

顺便说下,如果楼主是大学生 最好自己再买本经典的数据结果教材! 学校给买的多数不靠谱!

学校。。。 不说了!

[解决办法]
http://baike.baidu.com/view/178622.htm百度百科
[解决办法]
http://student.csdn.net/space.php?uid=46868&do=blog&id=12008
[解决办法]
LZ该看数据结构了~~

读书人网 >J2SE开发

热点推荐