单链表————顺序表

什么是线性表?

是零个或者多个类型相同元素的又穷序列。

 

基本运算:

1. PSeqList createNullList_seq(int m)

创建并且返回一个空线性表。

2. int insert_seq( PSeqList palist, int p, DataType x )

在线性表list中下标为p前插入一个值为x的元素,并返回插入成功与否的标志。

3. int deleteP (List list, Position p )

在线性表list中删除下标为p的元素,并返回删除成功与否的标志。

4. Position locate ( List list, DataType x )

在线性表list中查找值为x的元素的位置。

5. int isNull ( List list )

判别线性表list是否为空表。

 

结构体定义

struct SeqList
{
    int MAXNUM;             //顺序表中最大元素的个数
    int n;                 //存放线性表中元素个数n < MAXNUM
    DataType *element;    //元素
};

typedef struct SeqList* PSeqList;    //指针类型
PSeqList palist; 

建立顺序表

PSeqList createNullList_seq(int m){
    PSeqList palist =(PSeqList)malloc(sizeof(SeqList));
    if (palist!=NULL)
    {
        palist->element=(DataType*)malloc(m*sizeof(DataType));
        if (palist->element)
        {
            palist->MAXNUM=m;
            palist->n=0;
            return palist;
        }else free palist;
    }
}

回收和分配内存

float *p;
p = (float*) malloc(m*sizeof(float));
free(p);

 

插入操作

int insert_seq( PSeqList palist, int p, DataType x ){
    int q;
    if(palist->n>=MAXNUM){
        cout<<"溢出"<<endl;
        return 0;
    }
    if (p<0||p>=palist->n)
    {
        cout<<"not exit"<<endl;
        return 0;
    }
    for (q=palist->n-1; q >=p ; q--)
    {
        palist->element[q+1]=palist->element[q];//后移
    }
    palist->element[p]=x;//插入元素
    palist->n=palist->n+1; //元素个数加一
    return 1;
}

 

删除操作

int delete_seq( PSeqList palist, int p ){
    if (p<0||p>palist->n-1)
    {
        cout<<"Not exits"<<endl; //不存在元素
        return 0;
    }
    for (int  q = p; q < palist->n-1; q++)
    {
        //移位,删除位置p的元素
        palist->element[q]=palist->element[q+1];
    }
    palist->n =palist->n-1;//个数减1
    return 1;
}

是否为空表

//判断顺序表是否为空
int isNullList_seq( PSeqList palist){
    return palist->n==0;
}

优缺点:

顺序存储的优点:不需要附加空间,随机存取任一个元素;

缺点: 很难估计所需空间的大小,且开始就要分配足够大的一片连续的内存空间.

 

 

 

 

 

 

posted @ 2020-05-28 20:22  图神经网络  阅读(102)  评论(0编辑  收藏  举报
Live2D