C语言顺序查找程序

供稿:hz-xin.com     日期:2025-01-21
c语言顺序查找

在这个程序中,输入的10个数字,是以空格 隔开的。如果想用逗号隔开,会比较麻烦。
既然上面是空格隔开的,下面倒数第三行printf("%d in %d",key,i);key和i用空格隔开不用逗号是不行的。这是程序语句规定的,各输出项之间必须要用逗号分隔。这个与上面所说的运行时输入各数据用什么分隔(它是可以指定的)是两码事。

int *CreatArray(){
int *num = new int;
int n = -1;
printf("
请输入一组数字,输入-1结束输入:");
do{
n++;
scanf("%d",&num[n]);

}while(num[n] != -1);

return num;
}
int *num 这个只是定义了一个对象,但是没有为num在内存中开辟空间,值就赋不进去。
2.还有一个地方写错了
int OrderSearch(int *num,int aim){
int i;
for(i = 0;i < CountNum(num);i++){
if(num[i] == aim)break;
}
if(i == CountNum(num) - 1)
{
return -1;
}
return i;
}
这个是改过的,你看下。

//顺序查找
//思路:从表中最后一个记录开始,逐个进行记录的关键字和
//给定值的比较,若某个记录的关键字和给定值比较相等,则
//返回返回记录所在的位置,或查找完所有记录后还没有发现
//符合的记录,则查找失败。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10

typedef int DataType;//定义比较的元素类型

//静态查找表的顺序存储结构
typedef struct{
DataType * data;//数据元素存储空间基址,按实际长度分配,0号单元留空
//建表时按实际长度分配,0 号单元留空
int length;//表长度
}SSTable;

//创建一个静态表,内容为20以内的随机数
void createST(SSTable* ST,int n){
int i;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
srand((unsigned) time(&t));
for(i=1;i<=n;i++){
ST->data[i]=rand() ;//产生20以内的随机数
}
ST->length=n;
}
}
}

//创建一个静态表,内容按从小到大排列,以便折半查找
void createST_binary(SSTable* ST,int n){
int i,j=0;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
for(i=1;i<=n;i++){
ST->data[i]=j;
j+=4;
}
ST->length=n;
}
}
}

//打印出静态表的内容
void print_SSTable(SSTable* ST){
int i,n=ST->length;
if(ST!=NULL){
for(i=1;i<=n;i++){
printf("%d ",ST->data[i]);
}
printf("\n");
}
}

//顺序查找(Sequential Search)
//思路:从表中最后一个记录开始,逐个进行记录的关键字和
//给定值的比较,若某个记录的关键字和给定值比较相等,则
//返回返回记录所在的位置,或查找完所有记录后还没有发现
//符合的记录,则查找失败。
//查找成功:返回记录所在位置
//查找失败:返回0
int search_seq(SSTable ST,DataType key){
int i;
if(ST.data==NULL)return 0;
ST.data[0]=key;//设置监视哨。目的在于免去查找过程中每一步都要检测整
//个表是否查找完毕,是一个很有效的程序设计技巧 。监视
//哨也可以设在高下标处。
for(i=ST.length;ST.data[i]!=key;i--);
return i;
}

//折半查找(Binary Search)
//当记录的key按关系有序时可以使用折半查找
//思路:对于给定key值,逐步确定待查记录所在区间,每次将搜索空间减少一半(折半),
//直到查找成功或失败为止。
int search_binary(SSTable ST,DataType key){
int low,high,mid;
low=1;
high=ST.length;
while(low<=high){//当表空间存在时
mid=(low+high)/2;
if(ST.data[mid]==key){
return mid;//查找成功,返回mid
}
if(key<ST.data[mid]){
high=mid-1;//继续在前半区间查找
}else{
low=mid+1;//继续在后半区间查找
}
}
return 0;//查找失败
}

//分块查找(只记录思想)
//分块查找中,设记录表长为n,将表的n个记录分成b=n/s个块,每个s个记录
//最后一个记录数可以少于s个,且表分块有序,即后一个块的所有key值大于
//前一个块的所有key值
//每块对应一个索引项,索引项记录了该块记录的最大key值和该块第一记录的指针(或序号)
//算法:
//(1)由索引表确定待查找记录所在的块;
//(2)在块内顺序查找。

int main(){
int n=20;//在20个数中查找,方便看结果,不要设置得太大
SSTable ST,ST_binary;//分别用于顺序查找和折半查找的静态表
index indtb[n+1];//索引表,用于分块查找
createST(&ST,n);//创建一个随机静态表
createST_binary(&ST_binary,n);//创建一个从小到大顺序排列的静态表

//采用顺序查找
printf("原始数据:");
print_SSTable(&ST);
printf("顺序查找5的结果:%d\n",search_seq(ST,5));
printf("顺序查找10的结果:%d\n",search_seq(ST,10));
printf("顺序查找12的结果:%d\n",search_seq(ST,12));
printf("顺序查找15的结果:%d\n",search_seq(ST,15));
printf("顺序查找20的结果:%d\n",search_seq(ST,20));

printf("--------------------------------------------\n");
//采用折半查找
printf("原始数据:");
print_SSTable(&ST_binary);
printf("折半查找5的结果:%d\n",search_binary(ST_binary,5));
printf("折半查找10的结果:%d\n",search_binary(ST_binary,10));
printf("折半查找12的结果:%d\n",search_binary(ST_binary,12));
printf("折半查找15的结果:%d\n",search_binary(ST_binary,15));
printf("折半查找20的结果:%d\n",search_binary(ST_binary,20));

system("pause");//暂停一下,看看结果
free(ST.data);//不要忘了释放堆空间
return 0;
}

#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,x,y;
printf("输入你要查找的数:\n");
scanf("%d",&x);
y=0; //标记是否已找到,y=1表是找到了,y=0表示没找到
for(i=0;i<10;i++) //循环,把x和数组中的元素一个个比较
{
if(x==a[i]) //如果x=a[i]说明已经找到
{
y=1; //把y变成1,说明已经找到了
printf("你要查找的数%d在第个%d位置\n",x,i+1); //输出找到的相关信息
break; //跳出循环
}
}
if(y==0)printf("无法找到你要查找的数\n"); //y=0表示找不到
}

我说上面都在整的太麻烦了
#include<stdio.h>
#define N 10
int sequentialSearch(int a[], int len, int x)
{
for(int i = 0; i < len; i++)
if(x == a[i])
return i;
return -1;
}

void main()
{
int i;
int x,f, a[N]={22,23,5,43,67,24,67,34,12,10};
for(i = 0; i < N; i++)
printf("%d\t",a[i]);
printf("\n");
printf("Input a number\n");
scanf("%d",&x);
f = sequentialSearch(a,N,x);
if(f == -1)
printf("没有找到\n");
else
printf("%d在数组的下标是%d\n",x,f);
}

22 23 5 43 67 24 67 34 12 10

Input a number
43
43在数组的下标是3
Press any key to continue

数组查找:int i=0;
char a[10]={0,1,2,3,4,5,6,7,8,9};
for(;i<10;i++)
{
if(a[i]==6)
printf("%d",a[i]);
}
连表查找:

#include<stdio.h>
#include<string.h>
typedef struct
{
char name[100];
char studentID[100];
char major[100];
char grade[100];
}student;

int main()
{
FILE *stdinf;
stdinf=fopen("studentinf.txt","r");
char ID[100],inf[100];
int x,y,z,i,a,b;
student st;
printf("please input the studentID you want to search(0123456789):\n");
gets(ID);
while((fgets(inf,100,stdinf))!=NULL)
{
for(x=0,y=0,i=0;x<strlen(inf);x++,y++)
{
if(ID[x]==inf[y])
{
i++;
}
if(i==10)
{
for(a=0,b=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.studentID[a]=inf[b];
}
st.studentID[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.name[a]=inf[b];
}
st.name[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.major[a]=inf[b];
}
st.major[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.grade[a]=inf[b];
}
st.grade[a]='\0';
printf("studentID is:%s\n",st.studentID);
printf("student's name is:%s\n",st.name);
printf("student's major is:%s\n",st.major);
printf("student's grade is:%s\n",st.grade);
break;
}
}
}
fclose(stdinf);
return 0;
}

C语言顺序查找程序
\/\/查找成功:返回记录所在位置 \/\/查找失败:返回0 int search_seq(SSTable ST,DataType key){ int i;if(ST.data==NULL)return 0;ST.data[0]=key;\/\/设置监视哨。目的在于免去查找过程中每一步都要检测整 \/\/个表是否查找完毕,是一个很有效的程序设计技巧 。监视 \/\/哨也可以设在高下标处。f...

如何用C语言顺序查找程序?
include\\x0d\\x0avoid main()\\x0d\\x0a{\\x0d\\x0a int a[10]={1,2,3,4,5,6,7,8,9,10};\\x0d\\x0a int i,x,y;\\x0d\\x0a printf("输入你要查找的数:\\n");\\x0d\\x0a scanf("%d",&x);\\x0d\\x0a y=0; \/\/标记是否已找到,y=1表是找到了,y=0表示没找到\\x...

用C语言编写顺序查找和二分查找(折半查找)
顺序查找:在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。复杂度为o(n).二分查找又称折半查找,它是一种效率较高的查找方法。【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排...

c语言顺序查找法
如果是在已有n个元素的数组a中顺序查找值为x的元素,以下是实现查找的函数代码,查找成功则返回此元素的位置,否则返回-1:int find(int a[],int n,int x){int i;for(i=0;i<n&&a[i]!=x;i++);return i<n?i:-1;}

编写无序顺序表顺序查找、有序顺序表顺序查找、二分查找算法。用c语言...
\/\/在索引表中进行二分查找,找到的位置放在low中 mid=(low+high)\/2;if(index[mid].key<k) low=mid+1;else high=mid-1;} if(low<b){ \/\/在顺序表中顺序查找 for(i=index[low].link;i<=index[low].link+s-1 && i<n;i++)if(A[i].key==k) return i;return -1;} return -...

c语言如何实现-数组排序,二分查找
顺序搜索的方法是逐个比较,直至找出元素。二分搜索则利用了元素间的次序关系,可大大提高效率。二分法的基本思想是将n个元素分成个数大致相同的两半,取a[n\/2]与x作比较。如果x==a[n\/2],则终止。如果xa[n\/2],则只需在右半部分搜索。本题要求利用上一题得到的数组进行顺序查找和二分查找,分...

...一个长度为10的整数数组和一个数字,用顺序查找法找...
include<stdio.h> void main(){ int i,a[10],k,pos=-1;for(i=0;i<10;i++)scanf("%d",&a[i]);scanf("%d",&k);for(i=0;i<10;i++)if(k==a[i])pos=i;printf("pos=%d\\n",pos);}

15. 下面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填(2...
2008-04-05 对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次... 96 2009-12-04 一个简单C语言顺序查找程序,高手帮忙看下! 2 2009-07-01 索引顺序查找算法 10 更多关于顺序查找的知识 > 正在求助 换一换 回答问题,赢新手礼包 苦等45分钟: 一天一服,还有继续玩的必要吗 回答 苦等1小...

求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢
void chazhao1(int a[])\/*顺序查找*\/ { int n=0,num;printf("请输入要查找的数:\\n");scanf("%d",&num);for(int i=0;a[i]!=0;i++)if(a[i]==num){ printf("第%d位为%d。\\n",i,num);n=n+1;} if(n==0)printf("没找到该数!\\n");} void chazhao2(int a[])\/...

C语言或c++编写一个程序有以下功能:先读入一组数字然后输入一个数字...
先把输入的数字存放到一个数组中,已输入的数字等于-1作为结束输入的条件,然后再提示输入要找的数,用顺序查找的方式查找数组中是否有输入的数,最后输出查找的结果。#includeint main(){ int n,i,x,a[100]; printf("请先输入一组数字,以-1结束:\\n"); do { scanf("%d",&a[n]);...