线性表(一)

 这篇文章主要介绍有关线性表的相关知识点及操作,其中包含有顺序存储结构的线性标、链式存储结构的线性标,其中链式存储结构的线性表中还介绍了单链表、循环链表、双向链表。

了解线性表

  • 在线性表的顺序存储中,线性表中的数据如果在逻辑上是相邻的,那么在物理结构上也是相邻的。

  • 区分两个概念:
     数组长度:在线性表中,为了估算线性表的最大存储容量设置一个数组,数组的长度就是这个最大存储容量。线性表长度:指当前线性表中所有数据占用的长度,线性表长度不能超过存储容量,即数组长度。

//顺序存储结构代码
#define MaxSize 20      //存储空间初始分配量
typedef int ElemType;   //ElemType类型设置为int型,可根据实际情况修改
struct SqlList{
    ElemType datap[MAxSize];     //数组存储当前数据元素,最大值为MaxSize
    int length;     //线性表当前长度
};

线性表的基本操作:

下面的操作都是在存在SQList的条件下进行的操作
- 获取元素

int getElem(SqList L,int i,ElemType *e){
//在调用该函数时,需要传入一个SqList型的结构体,i表示要获取第i个位置的数据,e返回第i个数据元素的值。
    if(L.length==0||i<1||i>L.length)
        return ERROR;
    *e=L.data[i-1];//在数组中是从0开始的,所以获取第i个位置的数据就是读取data[i-1]
    return OK;  
}
  • 插入数据
int insert (SqList *l,int i,ElemType e){
    int k;
    if(l->length==MaxSize)
        return ERROR;
    if(i<1||i>l->length)
        return ERROR;
    if(ilength){
        for(k=l->length-1;k>=i-1;k--)
            l->data[k+1]=l->data[k]; 
    }   
    l->data[i-1]=e;
    l->length++;
    return OK;
} 
  • 删除数据
int Listdelete (SqList *l,int i,ElemType *e){
    int k;
    if(l->length==0)
        return ERROR;
    if(i<1||i>l->length)
        return ERROR;
    if(ilength){
        for(k=i;klength;k++)
            l->data[k-1]=l->data[k]; 
    }       
    l->length--;
    return OK;
} 

你可能感兴趣的:(数据结构)