zoukankan      html  css  js  c++  java
  • 考研数据结构——线性表

    需掌握的算法

    顺序表

    • 按元素值的查找算法,若查找成功,返回其下标,查找失败返回-1;
    int findElem(Sqlist L,int x)
    {
        int i;
        for(i=0;i<L.length;i++)
        {
            if(L.data[i]==x)
                return i;
        }
        return -1;
    }
    
    • 插入数据元素,在表中p位置上插入新的元素e,若p的输入不正确,返回0;
    int insertElem(Sqlist &L,int p,int e)
    {
        if(p<0||p>L.length||L.length==maxSize)
        {
            return 0;
        }
        for(int i=L.length-1;i>=p;i--)
        {
            L.data[i+1]=L.data[i];
        }
        L.data[i]=e;
        ++(L.length);
        return 1;
    }
    
    • 删除表中下标为p的元素,成功发挥1,失败返回0,并将被删除的值赋给e
    int deleteElem(Sqlsit &L,int p,int &e)
    {
        if(p<0||p>L.length||L.length==maxSize)
            return 0;
        e=L.data[p];
        for(int i=p;i<L.length-1;i++)
        {
            L.data[i]=L.data[i+1];
        }
        --(L.length);
        return 1;
    }
    

    单链表算法

    • 头插法算法
    void createListHead(LNode *&C,int a[],int n)
    {
        LNode *s;
        int i;
        C=(LNode*)malloc(sizeof(LNode));
        C->next=NULL;
        for(i=0;i<n;i++)
        {
            s=(LNode*)malloc(sizeof(LNode));
            s->data=a[i];
            s->next=C->next;
            C->next=s;
        } 
    }
    
    • 尾插法算法
    void createListTail(LNode *&C,int a[],int n)
    {
        LNode *r,*s;
        int i;
        C=(LNode*)malloc(sizeof(LNode));
        C->next=NULL;
        r=C;
        for(i=0;i<n;i++)
        {
            s=(LNode*)malloc(sizeof(LNode));
            s->data=a[i];
            r->next=s;
            r=r->next;
        }
        r->next=NULL;
    }
    
    • A、B是两个递增的单链表,将其合并成一个元素值非递减有序的链表C
    void merge(LNode *A,LNode *B,LNode *&C)
    {
        LNode *p=A->next;
        LNode *q=B->next;
        LNode *s;
        C=A;
        C->next=NULL;
        free(B);
        s=C;
        while(p!=NULL&&q!=NULL)
        {
            if(p->data<q->data)
            {
                r->next=p;
                p=p-next;
                r=r->next;
            }
            else
            {
                r->next=q;
                q=q-next;
                r=r->next;
            }
        }
        r->next=NULL;
        if(p!=NULL)
            r->next=p;
        if(q!=NULL)
            r->next=q;
    }
    
    • A、B是两个递增的单链表,将其合并成一个元素值非递增有序的链表C
    void merge(LNode *A,LNode *B,LNode *&C)
    {
        LNode *p=A->next;
        LNode *q=B->next;
        LNode *s;
        C=A;
        C->next=NULL;
        free(B);
        while(p!=NULL&&q!=NULL)
        {
            if(p->data<q->data)
            {
                s=p;
                p=p->next;
                s->next=C->next;
                C->next=s;
            }
            else
            {
                s=q;
                q=q->next;
                s->next=C->next;
                C->next=s;
            }
        }
        while(p!=NULL)
        {
            s=p;
            p=p->next;
            s->next=C->next;
            C->next=s;
        }
        while(q!=NULL)
        {
            s=q;
            q=q->next;
            s->next=C->next;
            C->next=s;
        }
    }
    
    • 查找链表中是否存在一个值为x的结点,若存在删除该节点并返回1,否则返回0
    void findAndDelete(LNode *A,int x)
    {
        LNode *p,*q;
        p=A;
        while(p->next!=NULL)
        {
            if(p->next->data==x)
                break;
            p=p->next;
        }
        if(p->next==NULL)
            return 0;
        else
        {
            q=p->next;
            p->next=p->next->next;
            free(q);
            return 1;
        }
    }
    

    双链表算法

    • 尾插法建立双链表

    • 查找结点

    • 插入结点的算法

    • 删除结点的算法

  • 相关阅读:
    python把汉字转换成拼音实现程序
    C#第三方zip解压压缩工具,带事例源码
    实现在线压缩文件的实现程序代码
    如何处理JSON中的特殊字符
    《汉字简体、繁体相互转换》 查看源代码
    中文字符转拼音源码
    upper_bound()函数使用方法
    CodeFroces New Assignment 二分图匹配
    选拔赛 hash 字符串匹配 哈希算法(白书p374)
    lower_bound()函数使用
  • 原文地址:https://www.cnblogs.com/liuliang1999/p/13221742.html
Copyright © 2011-2022 走看看