数据结构考前复习

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构考前复习相关的知识,希望对你有一定的参考价值。

链表

插入

int Ins_(int i,int x)

    Node *p=NULL;
    int cnt=0;
    while(cnt<i-1&&p!=NULL)
    
        p=p->nxt;cnt++;
    
    if(p==NULL)
        return -1;
    else
    
        Node *s=new Node;
        s->data=x;
        s->nxt=p->nxt;
        p->nxt=s;
    

删除

int del_(int i)

    Node *p;
    int cnt=0;
    while(p!=NULL&&cnt<i-1)
    
        p=p->nxt;cnt++;
    
    if(p==NULL)
        return -1;
    else
    
        Node *q=p->nxt;
        int x=q->data;
        p->nxt=q->nxt;
        delete q;
        return x;
    

查找

int Locate(int x)

    Node *p=fs->nxt;
    int cnt=1;
    while(p!=NULL)
    
        if(p->data==x)
            return cnt;
        else
            cnt++,p=p->nxt;
    
    if(p==NULL)
        return -1;

栈和队列

//10进制转任意进制
void Change(int num,int r)

    int top=-1;
    while(num!=0)
    
        d[++top]=num%r;
        num/=r;
    
    while(top!=-1)
        cout<<d[top--]<<" ";
    cout<<endl;


//以不带头结点的循环链表表示队列,并且只设一个结点指向队尾节点,不设头指针
void Enqueue(Node *re,int x)

    Node *s=new Node;
    s->data=x;
    if(re==NULL)
    
        re=s;
        re->nxt=re;
    
    else
    
        s->nxt=re->nxt;
        re->nxt=s;
        re=s;
    


int Dequeue(Node *re)

    if(re==NULL)
        return -1;
    if(re->nxt=re)
        re=NULL;
    else
    
        Node *p=re->nxt;
        re->nxt=p->nxt;
        delete p;
    

二叉树

层 次遍历

void Levelorder(Binode * root)

    int fr=-1,re=-1;
    Binode Q[N];
    if(root==NULL)
        return;
    Q[++re]=root;
    while(fr!=re)  
    
        Binode *p=Q[++fr];
        cout<<p->data<<" ";
        if(p->lc!=NULL)
            Q[++re]=p->lc;
        if(p->rc!=NULL)
            Q[++re]=p->rc;
    

后序遍历打印树的叶子节点

void Postleaf(Binode *root)

    if(root!=NULL)
    
        Postleaf(root->lc);
        Postleaf(root->rc);
        if(root->lc==NULL&&root->rc==NULL)
        
            cout<<root->data<<" ";
        
        

查找技术

//到哨兵的顺序查找
int Locate(int x)

    d[0]=x;
    int i=len;
    while(d[i]!=x)
        i--;
    return i;

//折半查找
int Binsearch(int x)

    int low=1,high=len,mid;
    while(low<=high)
    
        mid=low+high>>1;
        if(d[mid]>x)
            high=mid-1;
        else if(d[mid]<x)
            low=mid+1;
        else
            return mid;
    
    return -1;


//二叉排序树的插入
Binode InsertBST(Binode *bt,int x)

    if(bt==NULL)
    
        Binode *s=new Binode;
        s->data=x;
        s->lc=s->rc=NULL;
        bt=s;
        return bt;
    
    if(bt->data>x)
        bt->lc=InsertBST(bt->lc,x); //要指向插入的结点
    else if(bt->data<x)
        bt->rc=InsertBST(bt->rc,x);


//二叉排序树的搜索
Binode SearchBST(Binode *bt,int x)

    if(bt==NULL) return;
    if(bt->data==x)
        return bt;
    if(bt->data>x)
        SearchBST(bt->lc,x);
    else if(bt->data<x)
        SearchBST(bt->rc,x);

排序技术

插入排序

int d[N];
int len;
//直接插入排序
void Insert()

    for(int i=1;i<len;i++)
    
        int tmp=d[i];
        for(int j=i-1;j>=0&&tmp<d[j];j--)
        
            d[j+1]=d[j];
        
        d[j+1]=tmp;
    


//希尔排序
void Shellsort()

    for(int d=len/2;i>=1;d/=2)
    
        for(int i=d;i<len;i++)
        
            int tmp=d[i];
            for(int j=i-d;j>=0&&tmp<d[j];j-=d)
                d[j+d]=d[j];
            d[j+d]=tmp;
        
    

交换排序

//冒泡排序
void BubbleSort()

    int exchange=len-1,bound,tmp;
    while(exchange!=0)
    
        bound=exchange;exchange=0;
        for(int i=0;i<bound;i++)
            if(d[i+1]>d[i])
        
            swap(d[i+1],d[i]);
            exchange=j;
        
    


//快速排序
int Partition(int fs,int ls)

    int i=fs,j=ls;
    while(i<j)
    
        while(i<j&&d[i]<=d[j])  j--;
        if(i<j)
        
            int tmp=d[i];d[i]=d[j];d[j]=tmp;i++;
        
        while(i<j&&d[i]<=d[j]) i++;
        if(i<j)
        
            int tmp=d[i];d[i]=d[j];d[j]=tmp;j--;
        
    
    return i;

void QuickSort(int fs,int ls)

    if(fs>=ls)
        return;
    int k=Partition(fs,ls);
    QuickSort(fs,k-1);
    QuickSort(k+1,ls);

选择排序

//选择排序
void SeleSort()

    for(int i=0;i<len-1;i++)
    
        int tmp=i;
        for(int j=i+1;j<len;j++)
        
            if(d[tmp]>d[j]) tmp=j;    
        
        if(tmp!=i)
            swap(d[tmp],d[i]);
    


//堆排序
void Sift(int k,int ls)

    int i=k,j=2*k+1;
    while(j<=ls)
    
        if(j<ls&&d[j]<d[j+1]) j++;
        if(d[i]>d[j])
            break;
        else
        
            int tmp=d[i];
            d[i]=d[j];
            d[j]=tmp;
            i=j;
            j=2*i+1;
        
    

void HeapSort()

    for(int i=len/2;i>=0;i--)
        Sift(i,len-1);
    for(int i=1;i<len;i++)
    
        int tmp=d[0];
        d[0]=d[len-i];
        d[len-i]=tmp;
        Sift(0,len-i-1);
    


归并排序

//归并排序
int Merge(int fs1,int ls1,int ls2)

    int *tmp=d[len];
    int i=fs1,j=ls1+1,k=fs1;
    while(i<=ls1&&j<=ls2)
    
        if(d[i]<=d[j])
            tmp[k++]=d[i++];
        else
            tmp[k++]=d[j++];
    
    while(i<=ls1)
        tmp[k++]=d[i++];
    while(j<=ls2)
        tmp[k++]=d[j++];
    for(int i=fs1;i<=ls2;i++)
        d[i]=tmp[i];
    delete[] tmp;

void MergeSort(int fs,int ls)

    if(fs==ls) return;
    else
    
        int mid=(fs+ls)/2;
        MergeSort(fs,mid-1);
        MergeSort(mid+1,ls);
        Merge(fs,mid,ls);
    

以上是关于数据结构考前复习的主要内容,如果未能解决你的问题,请参考以下文章

数据库系统概论考前复习

考前复习必备MySQL数据库(关系型数据库管理系统)

计算机网络考前复习整理

计算机网络 之 数据链路层 考前快速复习

考前复习(codevs 2837)

python考前复习,python基础语法知识点整理