文 彦 考 研
让 | 梦想 | 有迹可循
老师简介
零师姐:2017年以初试分数350+、复试第2的成绩考入四川大学计算机学院计算机科学与技术专业。
现于文彦考研担任专业课导师,辅导川大874计算机综合考研笔试、复试。多次参与与IT公司的合作项目当中,熟悉计算机专业的考研动态与就业形势。
这是川大计算机考研第 20 篇文章
21届考研已经提上日程啦!很多同学对于专业课的重点都是靠自己去摸索和总结,今天师姐就直接给大家划重点。这篇文章主要是数据结构大题,我会给大家指明这部分必须掌握的点,一起来看吧!排序(归并排序、快速排序、冒泡排序)
归并排序模板
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
const int maxn=1e5+5;
using namespace std;
int temp[maxn];
int num=0;///统计逆序对数的。
void Merge(int a[],int left ,int mid,int right)
{
int i=left,j=mid+1,n=0,length=right-left;///i开始为左半部分最左边,j为右半部分最左边。temp数组是从下标0开始存数。
while(i<=mid&&j<=right){
if(a[i]>a[j]){///左边比右边大。
temp[n++]=a[j++];
num+=mid-i+1;///从i到mid都是比a[j]大。
}
else{
temp[n++]=a[i++];
}
}
if(i>mid){///这里说明的是左边全部填满了(因为前面的判断条件是i<=mid,那就是填右边了。
while(j<=right){
temp[n++]=a[j++];
}
}
else{
while(i<=mid){
temp[n++]=a[i++];
}
}
for(int k=0;k<=length;k++){///最后赋值到原数组必须要有的。
a[left+k]=temp[k];
}
}
void mergesort(int a[],int left,int right)
{
if(left
int mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
Merge(a,left,mid,right);
}
}
int main()
{
int number[30] = {23,3,26,24,5,1,12,21,29,15,17,10,7,22,6,20,19,11,2,4,9,25,13,27,14,18,28,8,16,30};
mergesort(number,0,30-1);///初始化调用也要注意额。
for(int i=0;i<30;i++){
printf("%d ",number[i]);
}
}
快速排序模板
1
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
#include
using namespace std;
int Partition(int a[], int left, int right)///7行代码
{
int i = left-1;///初始化一定要赋值好。
for(int j=left;j<=right-1;j++){
if(a[j] < a[right]){///把right这个作为轴了。
i++;///这个i坐标左边的值就是比a[right]小的。
swap(a[i], a[j]);///必须交换一下。
}
}
swap(a[i+1], a[right]);///最后把i+1和right交换,这样轴就是i+1了必须是保证i+1上当初就是作为标杆的a[right]啊。
return i+1;
}
void Qsort(int a[], int left, int right)
{
if(left
int q = Partition(a, left, right);
Qsort(a, left, q-1);
Qsort(a, q+1, right);
}
}
int main()
{
Int number[30] = {23,3,26,24,5,1,12,21,29,15,17,10,7,22,6,20,19,11,2,4,9,25,13,27,14,18,28,8,16,30};
Qsort(number,0,30-1);///c初始化调用也要注意额。
for(int i=0;i<30;i++){
printf("%d ",number[i]);
}
}
2
2、题目大意是,N个村庄,给你N个村庄修路的代价,问使得N个村庄联通的最小代价。
示例输入:
3
0 990 692
990 0 179
692 179 0
示例输出:
692
最小生成树两个解法prime和kruskal,一个从点出发,一个从最短的边出发,根据实际情况来定。
示例代码:
#include
#define MAX 65537
int i,j,n,u,T,max,tp,map[501][501],d[501];
bool s[501];
void Prim()
{
for(i=1;i<=n;i++)
{
d[i]=map[1][i];
s[i]=false;
}
s[1]=true;
for(j=1;j<=n;j++)
{
tp=MAX,u=1;
for(i=1;i<=n;i++)
{
if(!s[i]&&d[i] tp=d[i],u=i;
}
s[u]=true;
for(i=1;i<=n;i++)
{
if(!s[i]&&map[u][i] d[i]=map[u][i];
}
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
Prim();
for(i=1,max=0;i<=n;i++)
if(d[i]>max)max=d[i];
printf("%d\n",max);
}
return 0;
}
3
3、二分 模版
int binary_search(int *array, int length, int key) {
int start = 0, end = length - 1;
while(end >= start) {
int middle = start + (end - start) / 2;
int tmp = array[middle];
if(tmp < key) start = middle + 1;
else if (tmp > key) end = middle - 1;
else return middle;
}
return -1;
}
4
4、大写转换为小写
题意为:读入一些字符串,将其中的小写字母转成大写字母(其他字符不变)。
输入示例
Hello
ICPC2004
12345abcde
输出示例
HELLO
ICPC2004
12345ABCDE
示例代码:
#include
#include
int main ()
{
int ch;
while((ch=getchar( )) !=EOF)
{
if(ch>='a'&& ch<='z')
{
putchar(ch-'a'+'A');
}
else
{
putchar(ch);
}
}
}
5
5、去掉空格
题意为:读入一些字符串,将其中的空格去掉。
输入示例
Hello World
1 2 3
Nice to meet you
abc
输出示例
HelloWorld
123
Nicetomeetyou
abc
示例代码:
#include
void fun(char *str)
{
int i,j;
for(i=0,j=0;str[i]!='\0';i++)
{
if(str[i]!=' ')
{
str[j]=str[i];
j++;
}
}
str[j]='\0';
}
int main(void)
{
char str1[81];
while(gets(str1)!=NULL)
{
fun(str1);
puts(str1);
}
}
今天的分享就先到这里啦
如果你还对考研有什么疑惑
欢迎添加小彦微信或入群
与老师一对一咨询
推荐阅读20川大计算机考研 | 你非常容易混淆的几个点!
20川大计算机考研 | 考点总结,复习更高效!
20届川大计算机 | 不为人知的取分妙招,赶紧get吧!
20川大计算机 | 制胜第一步!师姐已经帮你整理好了!
20川大计算机考研 | 弄清这些问题,考研不是难事!
20川大计算机 | 时间复杂度,你避不开的一个考点!
20川大计算机考研 | 想拿高分?你要的题目都在这!
扫码入群 获取更多干货加小彦微信
一对一咨询~
官网/微博:文彦考研
注:图片来源于网络,版权归原作者所有,侵删。