我想请教什么是链表,我有一些编程的基础,我了解数组,但是链表这个东东我实在是搞不懂,能否请各位给举个例子,或用一些代码来实现,在下高分求教,多谢~~~    顺便问下:我今天刚刚注册,是朋友推荐的。怎么我在发帖时的“帖子问题点数”这一栏只能给“0”分呢?我明明有200可用分呀。

解决方案 »

  1.   

    是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
      相比较顺序结构,链表比较方便插入和删除操作。
      线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素 与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如下图所示),表示线性表中一个数据元素 。
    =====================================================
      三个链表函数(C语言描述)
      #include <stdio.h>
      #include <stdlib.h>
      struct Node{ 
      int data;//数据域
      Node * next;//指针域
      };
      /**************************************************************************************
      *函数名称:insert
      *函数功能:在连表中插入元素.
      *输入:head 链表头指针,p新元素插入位置,x 新元素中的数据域内容
      *输出:无
      *************************************************************************************/
      void insert(Node * head,int p,int x){ 
      Node * tmp = head;
      for(int i = 0;i<p;i++){
      tmp = tmp->next;
      if(tmp == NULL) return ;
      }
      Node * tmp2 = new Node;
      tmp2->data = x;
      tmp2->next = tmp->next;
      tmp->next = tmp2;
      }
      /**************************************************************************************
      *函数名称:del
      *函数功能:删除链表中的元素
      *输入:head 链表头指针,p 被删除元素位置
      输出:被删除元素中的数据域.如果删除失败返回-1
      **************************************************************************************/
      int del(Node * head,int p){
      Node * tmp = head;
      for(int i = 0;i<p;i++){
      tmp = tmp->next;
      if(tmp == NULL) return -1;
      }
      int ret = tmp->next->data;
      tmp->next = tmp->next->next;
      return ret;
      }
      void print(Node * root){
      for(Node *tmp = head; tmp!=NULL; tmp = tmp->next)
      printf("%d ",tmp->data);
      printf("\n");
      }
      int main(){
      Node * head;
      head = new Node;
      head->data = -1;
      return 0;
      }
        
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   

    上面给出了C语言
    下面就给出java
    /**
     * @(#)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;

    }
    }