vipoyb 发表于 2013-2-4 20:12:37

链表~~~~

链表 是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
  线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素 之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如下图所示),表示线性表中一个数据元素 。
  数据域 data 指针域 next
  其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。
  由分别表示,,…, 的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表.
  =====================================================
  三个链表函数(c++)

#include <stdio.h>  #include <stdlib.h>  struct Node{  int data;  Node * next;  };   /**************************************************************************************
  *函数名称:insert
  *函数功能:在连表中插入元素.
  *输入:root 链表头指针,idx新元素插入位置,d 新元素中的数据域内容
  *输出:无
  *************************************************************************************/

void insert(Node * root,int idx,int d){  Node * tmp = root;  for(int i = 0;i<idx;i++){  tmp = tmp->next;  if(tmp == NULL) return ;  }  Node * tmp2 = new Node;  tmp2->data = d;  tmp2->next = tmp->next;  tmp->next = tmp2;  }   /**************************************************************************************
  *函数名称:del
  *函数功能:删除链表中的元素
  *输入:root 链表头指针,idx 被删除元素位置
  输出:被删除元素中的数据域.如果删除失败返回-1
  **************************************************************************************/

int del(Node * root,int idx){  Node * tmp = root;  for(int i = 0;i<idx;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 = root; tmp!=NULL; tmp = tmp->next)  printf("%d ",tmp->data);  printf("\n");  }  int main(){  Node * root;  root = new Node;  root->data = -1;  return 0;  }   C语言是学习链表的很好的学习工具。
页: [1]
查看完整版本: 链表~~~~