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

浙公网安备 33010602011771号