课堂笔记:顺序表、单链表

线性表( Linear List )的定义是零个或多个具有相同类型的数据元素的有限序列。数据元素的个数定义为线性表的长度 。长度等于零时称为空表,一个非空表通常记为 L = ( a 1 , a 2 ,……, a n ) 其中, a i ( 1 ≤ i ≤ n )称为数据元素,下标 i 表示该元素在线性表中的位置或序号, 称元素 a i 位于表的第 i 个位置,或称 a i 是表中的第 i 个元素。
线性表的顺序存储结构-顺序表特点:线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。
作用:线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
顺序存储的实现:一维数组存储顺序表中的数据。
顺序表的特点
线性表顺序表示的优点是:(1) 无需为表示结点间的逻辑关系而增加额外的存储空间(因为逻辑上相邻的元素其存储的物理位置也是相邻的);(2) 可方便地随机存取表中的任一元素。
线性表顺序表示的缺点:(1)插入或删除运算不方便,除表尾的位置外,在表的其它位置上进行插入或删除操作都必须移动大量的结点,其效率较低; (2) 由于顺序表要求占用连续的存储空间,存储分配只能预先进行静态分配,因此当表长变化较大时,难以确定合适的存储规模。
线性表的链式存储结构及实现
链式存储分配的特点:根据线性表的长度动态的申请存储空间,以解决顺序存储中存在的存储空间难以确定的问题。
链式存储结构的实现:单链表、双向链表、循环链表等。
指针变量的特点:
变量的三要素:名字,内存地址,值。
变量的左值,右值
左值指变量的内存地址, 右值:值。
指针变量的右值本身又是一个左值。
带头节点的单链表
头结点:如果链表有头节点,则链式结构中的第一个节点称为头结点:其数据域可以存储一些附加信息,如链表长度;其指针域指向链表中的第一个节点。
单链表的构造-头插法

template <class T>  
LinkList<T>:: LinkList(T a[ ], int n) 
{
    first=new Node<T>; 
    first->next=NULL;   
    Node<T> *s;   
    for(int i=0;i<n;i++){
        s=new Node<T>;           
        s->data=a[i];       
        s->next=first->next;          
        first->next=s;
    }
}

单链表的构造-尾插法

template <class T>  
LinkList<T>:: LinkList(T a[ ], int n) {
    Node<T> *r,*s; 
    first=new Node<T>; 
    r=first;              
    for(int i=0;i<n;i++){
        s=new Node<T>;
        s->data=a[i];        
        r->next=s; r=s; 
    }
    r->next=NULL; 
}

不带头结点的单链表的构造
头插法:

{    
    first=NULL;
    for(int i=0;i<n;i++)
    {
        s=new node<T>; 
        s->data=a[i];         
        s->next=first;         
        first=s;       
    }
}

尾插法:

node<T> *r;     
head=NULL;    
if(n<=0)return;    
s=new node<T>;    
s->data=a[0];    
s->next=head;    
head=s;       
r=head;
for(int i=1;i<n;i++) {          
    s=new node<T>;         
    s->data=a[i];         
    r->next=s;         
    r=s;      
}

析构函数

template <class T>
LinkList<T>::~LinkList()
{
   Node<T> *q;   
   while(first) 
   {
       q=first->next;       
       delete first;       
       first=q;   
   }
}

若线性表的操作主要是进行查找,很少做插入和删除时,宜采用顺序表做存储结构。
对于频繁进行插入和删除的线性表, 宜采用链表做存储结构。
当线性表的长度变化不大, 易于事先确定其大小时,为了节约存储空间,宜采用顺序表作为存储结构。

发布了48 篇原创文章 · 获赞 25 · 访问量 2453

猜你喜欢

转载自blog.csdn.net/qq_43628959/article/details/101177664