抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

二分查找算法

只能对有序排列数据进行高效查找。

方法

定义下标:头l,尾r,中位数mid。

集合

集合(set)作为存储数据容器时:

  • 它不允许存储相同元素,只能保留一份。
  • 能快速帮助我们进行去重操作,过滤掉重复元素。

典型应用

词汇量统计

统计一篇英文文章的总单词数,使用集合进行去重,判断英文文章难度。

队列(Queue)

数组实现队列

队列相关操作

void Enqueue(T t);//入队

T Dequeue();//出队

T Peek();//查看队首元素

int Count { get; }//查看元素个数

bool IsEmpty { get; }//查看队列是否为空

影响程序运行的总时间主要和两点有关

  • 执行每条语句的耗时

  • 执行每条语句的频率

前者主要取决于计算机性能、编译器、操作系统

后者主要取决于程序本身和输入

什么是链表

链表由若干节点构成,节点之间有链接,链接末尾没有节点,指向空null.

image-20221025134229495

链表的实现需要定义:

顺序表

image-20221025134433697

定义接口

namespace AlgorithmTest06_List
{
interface IListDS<T>
{
int GetLength();//求长度

void Chear();//清空

bool IsEmpty();//判断线性表是否为空

T Add(T item);//添加

void Insert(int index, T item);//插入

T Delete(int i);//删除

T this[int i] { get; }//定义索引器 获取元素

T GetElem(int i);//取表元

T Set(int i, T item);//修改

int IndexOf(T value);//按值查找

void Remove(T value);//根据值删除
}
}

栈(Stack)

栈中元素是从上到下加入的,即“后进先出”

栈的应用

十进制转二进制

枚举算法

image-20221025135058941

打印结果:

image-20221025135114001

递推算法

有一只大兔子,一个月生一只小兔子,过一个月小兔子变大兔子。以此求第几个月,有几个大兔子。

namespace AlgorithmTest
{
class Program
{
static void Main(string[] args)
{
//费波拉契数列,一个数等于前两个数之和。
//根据输入数,展示到这个数之前的所有数。
Console.WriteLine("请输入一个0~21之间的数");
int i = int.Parse(Console.ReadLine());
int[] array = new int[20];//定义有20个空的数组
array[0] = 1;
array[1] = 1;
if (i == 1)
{
Console.WriteLine(array[0]);
}
else if (i == 2)
{
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
}
else if (i >= 3 && i < 21)
{
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
for (int j = 3; j <= i; j++)
{
array[j - 1] = array[j - 2] + array[j - 3];
Console.WriteLine(array[j - 1]);
}
}
else
{
Console.WriteLine("数字超过范围");
}
Console.ReadKey();
}
}
}

打印结果:

最近打算恶补数据结构,在学校的时候对数据结构与算法一直是一知半解,懵懵懂懂的样子。特开此贴记录一下过程,希望能有所收获。打算看过c#基本的数据结构之后,各种类型算法题多刷刷。

算法与数据结构的关系

  • 数据结构可以认为是数据在程序中的存储结构,和基本数据操作
  • 算法可以认为是用来解决问题的方法,算法基于数据结构
  • 数据结构是问题的核心,是算法的基础

算法(Algorithm)的评价标准