数据结构之线性表学习一

线性表是线性结构的一部分,线性结构的特点:在数据元素的非空有限集合中,存在唯一的一个被称做第一个的数据元素;存在唯一的一个被称做最后一个的数据元素;除第一个之外,集合中的每个数据元素只有一个前驱;除最后一个之外,集合中的每个数据元素只有一个后驱。

(线性结构包括许多部分,线性表,堆栈等。数组也是,广义表呢?非空有限集合中,有第一个数据元素,有最后一个数据元素,循环链表呢,双向链表呢?循环链表,单链的循环链表,将最后一个数据元素的指针指向头结点,而不是第一个数据元素即所谓的首元结点。双向链表,只是增加了一个指针域,指向直接前驱,还是一条长线过去,没有循环,即遵守线性结构。)

线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。

(线性表有两种存储结构,一种顺序存储结构,一种链式存储结构。线性表是一个相当灵活的数据结构。

InitList(&L)构造一个空的线性表,    DestroyList(&L)销毁线性表,       ClearList(&L)将L置为空表,

ListEmpty(L)检测L是否为空表,        ListLength(L)返回L中数据元素个数,        GetElem(L,i,&e)用e返回L中第i个数据元素的值,   

LocateElem(L,e,compare())返回L中第一个与e满足compare()的数据元素的位序,     

PriorElem(L,cur_e,&pre_e)返回e的直接前驱元素,        NextElem(L,cur_e,&next_e)返回e的直接后继元素,      

ListInsert(&L,i,e)在L中第i个数据元素之前插入e,                   ListDelete(&L,i,&e)删除第i个数据元素并用e返回其值,                 ListTraverse(L,visit())函数visit()遍历整个表L

总共十二种操作。还可组合成更多更 复杂的操作。

顺序表,可以使用数组结构表示,可随机存储,很多操作对我们来说很容易理解。分配一个基本大小的空间,然后再realloc()分配增量空间。因为是连续存储,所以添加删除不方便。

链表,相对来说稍微复杂,但也更为强大点,和指针相关。用一个指针L来指代线性表的头结点或者是首元结点的存储地址,头结点不存储任何数据元素,不过有时也存储如线性表的长度等附加元素,所以线性表的第一个元素为首元结点,无论是插入还是删除都是从首元结点的1开始的。相较于顺序表,有了指针的链表在添加和删除上面很是方便。只要更改指针就可以。p=p->next )

链表中的每个结点只包含一个指针域的称为单链表或线性链表。包含两个指针域的称为双向链表。线性链表最后一个结点的指针为空(NULL)。数据元素之间的逻辑关系是由指针表示的。

线性表给人的难点,可能就是初期接触数据结构的表示方法的熟悉,还有对指针和C++的熟悉。

线性表的单链表存储结构

typedef struct LNode{

       ElemType data;

       struct LNode *next;

}LNode,*LinkList;

if(!L.elem) exit(overflow);

posted @ 2014-02-26 20:43  天景色  阅读(236)  评论(0编辑  收藏  举报