Live2d

常见数据结构对应的使用算法

引言:我们在设计程序时,一定会关注到算法和数据结构,因为数据表示的本质是数据结构设计,数据处理的本质是算法设计。本篇文章是关于一些常见的数据结构对应适用算法的情况。 

1.常见数据结构

1.1线性表:

  线性表按存储方式可分为顺序表和链表。线性表的基本运算是指对线性表的操作,常见的包括:求长度、置空表、遍历、查找、修改、删除、插入、排序等。此外还有复杂的运算,比如线性表的合并、反转、求中值、删除重复元素等,其中的各种操作又有详细的算法分类,如排序就有经典的几大排序算法。

1.2栈和队列

  栈是限定在尾部进行插入和删除操作的线性表。允许插入和删除操作的称为栈顶,另一端称为栈底。因此,栈的操作是后进先出原则进行的。栈的基本运算包括:置空栈、入栈、出栈、取栈顶元素和判空。由于栈是受限的线性表,故可以由顺序表和链表来实现。

队列也是受限的线性表。它只允许在一端插入,称为队尾(rear);另一端删除,称为对头,在队尾插入称为入队,对头删除称为出队。基本运算包括:置空队、入队、出队、取队头和判队空。它也可以由顺序表或者链表来实现。

2.常见算法

2.1查找类

  常见算法有查找和排序两种,其中查找是计算机数据处理经常用到的一种重要应用,当需要反复在海量数据中查找制定记录时,查找效率成为系统性能的关键。查找算法分为静态查找和动态查找,其中静态查找包括:顺序查找、二分查找和分块查找;动态查找包括:二叉排序树和平衡二叉树。

  下面给出部分查找算法的核心代码:

二分查找:

int Search_Bin(int a[], int n, int target)//a[0]不用,a[1]~a[n]存储数据
{
    int low = 1;
    int high = n;
    while(low<=high)
    {
        int mid = low+(high-low)/2; //防止溢出
        if(a[mid]==target) return mid;
        else if(a[mid]>target) high=mid-1;
        else low=mid+1;
    }
    return 0;
}

2.2排序类

  常用的排序算法有:插入排序、冒泡排序、堆排序、选择排序和归并排序等,下面同样给出部分排序算法的核心代码

归并排序:

void Merge(int r[],int r1[],int s,int m,int t)
{
    int i=s,j=m+1,k=s;
    while(i<=m && j<=t)
    {
        if(r[i]<r[j])
            r1[k++]=r[i++];
        else
            r1[k++]=r[j++];
    }
    while(i<=m) r1[k++]=r[i++];
    while(j<=t) r1[k++]=t[j++];
}
//递归归并
void MergeSort(int r[],int r1[],int s,int t)
{
    if(s==t) r1[s]=r[s];
    else
    {
        int m=(s+t)/2;
        MergeSort(r,r1,s,m);
        MergeSort(r,r1,m+1,t);
        Merge(r1,r,s,m,t);
    }
}

 

posted @ 2021-03-16 21:22  IkNyEa  阅读(152)  评论(0)    收藏  举报