数据结构学习,链表和数据表


1.顺序表的查找

int Locate(Sqlist L, ElemType x){
    for (int i = 0; i < L.length; ++i){
        if(L.elem[i]==x)return i+1;//逻辑位置i+1
    }
    return 0;
}

2.线性表数据插入

void  InsertList(Sqlist &L,int i,ElemType x){
    if(i<1||i>L.length+1 || L.length>=L.ListSize){
        printf("error");
        return;
    }
    for (int j = L.length-1; j >=i-1 ; --j) {
        L.elem[j+1]=L.elem[j];//先移
    }
    L.elem[i-1]=x;//后插
    ++L.length;//长+1
    return;
}

3.顺序表的删除

void deleteList(Sqlist &L,int i){
    for (int j = i; j <=L.length ; ++j) {
        L.elem[j-1]=L.elem[j];//赋值前移
    }
    L.length--;//长-1
}

4.链表查找

bool LocateElem (List L,int e)
{
    List p=L->next;
    while (p!=NULL && p->data!=e)//依次比较
        p=p->next;
    if (p==NULL)
        return false;
    else
        return true;
}

5.链表插入

void ListInsert(List &L, int i,int e){
   List p=L;int j=0;
    while(p && jnext;
        ++j;
    }
    if(!p||j>i-1) return ; //i大于表长+1或者小于1
    List s=new LNode;//生成新节点
    s->data=e;///将节点s的数据置为e
    s->next=p->next;//将节点s插入l中
    p->next=s;
    return ;
}

6.链表删除

void ListDelete(List &L, int i){
    List p=L;int j=0;
    while(p->next &&jnext; ++j;
    }
    if(!(p->next)||j>i-1) return ; //删除位置不合理
    List q=p->next; //临时保存被删结点的地址以备释放
    p->next=q->next;//改变删除结点前驱结点的指针域
    delete q;//释放删除结点的空间
    return ;
}