数据结构—顺序查找和普通查找(C语言)
还在为代码无法正常运行而烦恼,关注罡罡同学不迷路,解决你的烦恼。
如果你觉得,本文章对你有那么一丢丢的帮助,记得点赞关注转发,罡罡同学非常感谢哈!
后续文章是关于数据结构一些基础实验,本人都已经成功运行,如果有问题,欢迎在评论区留言。
我是罡罡同学,一位初入网安的小白。☜(ˆ▽ˆ)
[*]您的支持是罡罡同学前进的最大动力!
普通查找:我们刚开始学C语言时,老师都会让我们在数组中查找某一个元素,那时候,只是最普通的方法,循环+if判断语句,也没有什么技巧可言。但是,当我们学数据结构后,我们就有了更加高效的方法——顺序查找。
顺序查找:一般都会使用一个“哨兵”,也就是将数组的第一个位置留出来,用于存放“哨兵”,而不是数据元素。
注:此程序使用的是动态数组,也就是用malloc函数去动态分配内存空间,这样的话比较灵活。
源代码会在下面展示,讲解视频在B站上哦(需要的同学动动手指转移到B站)链接如下:
https://www.bilibili.com/video/BV1g54y1q7m2 或B站关注 罡罡同学 找7-6号动态
大家都是学生,互相都比较了解,也都有这样的体验:代码不会->网上搜索->复制粘贴->编辑器报错->????头晕->疯狂枚举找错->无法正常改错->继续网上搜索… 其实这样我们的进步是比较慢的。(道理大家都懂,这里不再13
13了)
源代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int* data;//动态数组变量
int length;
}SSTable;
int SSTable_init_new(SSTable *ST)//顺序查找初始化
{ int k,length;
printf("输入新表的长度:");
scanf("%d",&length);
ST->length=length; // 实际分配了length+1个存储单元,因为要多分配一个,
ST->data=(int*)malloc((length+1)*sizeof(int));//存储“哨兵”,也就是动态数组的第一个位置
printf("输入%d个新表的元素:",ST->length);
for(k=1;k<=ST->length;k++)
scanf("%d",&ST->data);
return ST->data!=NULL;//分配内存成功返回1,否则返回0
}
int SSTable_init_old(SSTable *ST)//普通查找初始化
{ int k,length;
printf("输入老表的长度:");
scanf("%d",&length);
ST->length=length;
ST->data=(int*)malloc((length)*sizeof(int));
printf("输入%d个老表的元素:",ST->length);
for(k=0;k<ST->length;k++)//数组第一个也用来存储数据元素
scanf("%d",&ST->data);
return ST->data!=NULL;//分配内存成功返回1,否则返回0
}
int Search_Seq_new(SSTable *ST)//顺序查找(用哨兵)
{ int i,key;//Key为查找元素
printf("输入顺序查找元素:");
scanf("%d",&key);
ST->data=key;//哨兵
for(i=ST->length;ST->data!=key;--i);
printf("顺序查找元素位置:%d\n",i);//位置为0,查找失败,位置为正整数,查找成功
return i;
}
int Search_Seq_old(SSTable *ST)//普通查找 从后往前查找
{ int key,i;
printf("输入普通查找元素:");
scanf("%d",&key);
for(i=ST->length-1;i>=0;i--)
if(ST->data==key) //顺序查找的高效就在此处
{ printf("普通查找元素位置:%d",i+1);
return i+1;//位置一般不为0
}
return 0; //找不到
}
int main ()//67 78 76 45 33 99 88 查找33
{ SSTable ST1,ST2;
SSTable_init_new(&ST1); //顺序查找(用哨兵)
Search_Seq_new(&ST1);
printf("\n");
SSTable_init_old(&ST2);//普通查找
Search_Seq_old(&ST2);
return 0;
}
文档来源:51CTO技术博客https://blog.51cto.com/u_15288224/2987751
页:
[1]