c语言数据结构学习心得——线性表

线性表:具有相同数据类型的n(n>0)个数据元素的有限序列。

主要有顺序存储和链式存储。

顺序存储:

特点:地址连续,随机/存取,顺序存储。

建立:首地址/存储空间大小(数组),表长。

方式:静态和动态。

优点:存储密度大;随机存储:快速存取表中任一位置元素。

缺点:插入删除移动大量元素;对存储空间要求高,会产生存储空间的碎片。

1.插入

bool ListInsert(SqList &L,int i,Elemtype e){
       if(i<1||i>L.length+1)     //判断i范围是否有效
            return falseif(L.length>=MaxSize)   //当前存储已满,不能插入
            return false;
       for(int j=L.length;j>=i;j--)   //第i个元素后移
            L.data [j]=L.data[j-1];
            L.data[i-1]=e;                //第i个元素放入e
            L.length++;              //链表长度加1
            return true;
}

最好的情况:表尾插入 只用加一个数据,时间复杂度为o(1);

最坏的情况:表头插入,所有元素后移一位,时间复杂度为o(n);

平均时间复杂度:o(n)。

2.删除

bool ListDelete(SqList &L,int i,Elemtype &e){
       if(i<1||i>L.length)     //判断i范围是否有效
            return false;
       e=L.data[i-1];         //将被删元素赋给e
       for(int j=i;j<L.length;j++)   //第i个后元素前移
            L.data [j-1]=L.data[j];
            L.length--;              //链表长度减1
            return true;
}

时间复杂度如插入,但是具体要分析。

线性表链式存储

通过一组任意的存储单元来存储线性表中的数据元素。为了建立起数据元素之间的线性关系,对每个链表结点,除了自身信息,还存放了一个指向其后继的指针。

单链表:单个指针

typedef struct LNode{  //定义单链表结点类型
     Elemtype data;      //数据域
     struct LNode *next; //指针域
}LNode,*LinkList;

通常用“头指针”来标识一个单链表,如Linklist L,那么头指针L就代指一个单链表。

单链表第一个结点之前附加一个结点,称为“头结点”。其数据域可不设任何信息,也可记录表长等信息。头结点指针域指向线性表第一个元素结点。

头结点:操作方便:第一元素前插入和删除元素和第一结点操作与其他结点一致;链表无论空或不空,操作也统一。

头指针始终指向链表的第一个结点。

双链表:双指针

typedef struct DNode{  //定义单链表结点类型
     Elemtype data;      //数据域
     struct DNode *prior,*next; //前驱指针和后继指针
}DNode,*DLinkList;

插入:

给插入的前一个元素加辅助指针p,插入元素加辅助指针s

1.s->next=p->next;

2.p->next->prior=s;

3.s->prior=p;

4.p->next=s;;

删除:

删除的前一个元素加一个辅助指针p,删除的指针加一个辅助指针q

1.p->next=q->next;

2.q->next->prior=p;

3.free(q);

循环单链表:

与单链表的区别在于,表中最后一个结点的指针不是NULL,而是改为指向头结点,从而整个链表形成一个环。

从任何一个结点出发都能访问到链表的每一个元素。

1.判断条件:头结点的后继指针是否等于头指针。

2.可对循环单链表不设头指针而仅设尾指针,使效率更高。

循环双链表:区别于双链表是首尾结点构成环。

1.尾结点后继指针指向表头结点,头结点的前驱指针指向尾结点。

2.当为空表时,头结点的prior域和next域都等于L。

静态链表:

借助数组来描述线性表的链式存储结构,结点也有数据域data和指针域next,此指针是结点的相对地址(数值下标),又称游标。

对插入与删除操作与动态链表(动态分配内存的方式)相同,只需修改指针,而不需移动元素。

猜你喜欢

转载自www.cnblogs.com/suprechen/p/10591325.html
今日推荐