数据结构基础(2)-------------线性表

来源:互联网 发布:开源中国客户端源码 编辑:程序博客网 时间:2024/04/29 10:58

1.线性表顺序存储结构的优点:一是无需为元素之间的逻辑关系而增加额外的存储空间;二是可以迅速的取表中任意位置的元素。其缺点为:一是插入和删除需要移动大量的元素;二是线性表需要固定的存储空间,不适用于线性表长度变化较大的场合,也就是不灵活;三是有存储空间的碎片;(其实,动态数组在一定程度上可以避免此类情况的发生,比如STL中的std::vector)


2. 线性表的链式存储结构:

不仅要存储数据的信息,还要存储元素之间的逻辑关系,也即是后继元素的地址或者是前继元素的地址;

有了头结点,对第一元素的插入和删除的操作就与其余结点的操作统一了;

头指针指向链表的第一个结点。若链表有头结点,则指向它;

其C语言实现为

typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} Node;
typedef Node *LinkList;

3.单链表的读取:

bool GetEle(LinkList L,int i,ElemType *e)

{

     int j=1;

     LinkList p=L->next;   //p指向第一个元素的位置

    while(p && j<i)

    {

           p=p->next;

           j++;

     }

     if(!p || j>i)

     { return false;}

     *e=p->data;

     return true;

}

4.单链表的删除;

bool ListDelete(LinkList L,int i,ElemType *e)  //删除链表中第i个元素,并用e 返回其值,L的长度减1;
{
int j=1;
LinkList p=L->next;  //p指向第一个结点
while (p->next && j<i)  //遍历寻找第i个元素
{
p=p->next;
++j;
}
if (!p->next || j>i) //第i个元素不存在
{
return false;
}
*e=p->next->data;
LinkList q=p->next;  //q指向第i个元素;
p->next=q->next;     //使第i个元素的前继指向其后继
free(q);             //释放第i个元素的内存
return true;
}

5.单链表的结构优点:不需要预先分配存储空间,元素个数也不受限制;并且其在找到元素位置后,插入和删除操作的复杂度为O(1);缺点是查找速度没有顺序存储的快;

6.循环链表

7.双向链表


0 0
原创粉丝点击