数据结构线性表

线性表:

线性结构特点:
1、除第一个外,其他每个元素都只有一个前驱
2、除最后一个外,其他每个元素都只有一个后继

 

顺序存储:一组地址连续的存储单元,随机存取

exit(OVERFLOW);
exit()函数:即使是在除main()之外的函数调用exit();也会终止程序
return()只是将该层控制器移交给上一级

stdlib.h:void exit(int status); status不为0,都表示异常退出

 

链表存储:
结点:数据域、指针域

引入头结点优点:
1、链表的第一个位置上的操作和表的其他位置操作一致,无须进行特殊处理
2、空表和非空表的处理也统一了

 

单链表实现线性表的问题:
1、单链表表长是一个隐含值
2、在最后一个元素最后插入元素,需遍历整个链表
3、元素“位序”的概念被淡化,结点“位置”概念强化


改进链表:
1、增加“表长”、“表尾指针”、“当前位置指针”三个数据域
2、将基本操作由“位序”改为“指针”


静态单链表:用一维数组描述线性链表
特点:i=s[i].cur相当于单链表中的p=p->next;
  链表结尾的s[i].cur=0;
缺陷:不能辨明数组中哪些分量未被使用
解决办法:将所有未被使用的以及删除了的分量用游标链成一个备用的链表。
使用:进行插入时,从备用链表中取得第一个结点插入;反之,在删除时,将删除的结点链接到备用链表上。

 

循环链表:表中最后一个结点的指针域指向头结点,整个链表形成一个环。
判断结尾指针不是判断指针域是否指向空(p->next==NULL)
      而是判断指针是否指向头指针(p->next==head)


双向链表:克服单链表的单向性
特点:d->next->prior=d->prior->next=d;
缺陷:求链表长度不如顺序存储;位序概念淡化

 

练习:
1、线性表特点:
  表中元素个数有限;
  元素有先后次序;
  数据类型都相同。
2、线性表是一种逻辑结构,一对一的相邻关系。
  顺序表和链表是指存储结构
  顺序表的特点是表中元素的逻辑顺序与其物理顺序相同
3、有序顺序表删除重复值:

void delete(List &l)
{
  for(i=1,j=0;i<l.length;i++)
  {
    if(l.data[i]!=l.data[j])
    l.data[++j]=l.data[i];
  }
  l.length=j+1;
}

 


4、顺序表和链表的比较:
  存取方式:顺序表是随机存取;链表是顺序存取
  逻辑结构和物理结构:顺序存储,逻辑相邻,物理存储位置也相邻;链表,逻辑相邻,物理存储位置不一定相邻,对应的逻辑关系通过
            指针链接
  查找、插入和删除
  空间分配:顺序表需预先分配足够大的存储空间,虽然可动态分配,但需移动大量元素,且如果内存没有大块的连续存储空间将导致分配
      失败;链式存储分配空间时操作灵活、高效
5、数组排序的最少时间复杂度为O(nlog2n)

 

posted @ 2015-12-08 00:26  chris_chan1024  阅读(260)  评论(0编辑  收藏  举报