c語言查詢順序,c語言順序查找代碼

本文目錄一覽:

C語言順序查找程序

//順序查找

//思路:從表中最後一個記錄開始,逐個進行記錄的關鍵字和

//給定值的比較,若某個記錄的關鍵字和給定值比較相等,則

//返回返回記錄所在的位置,或查找完所有記錄後還沒有發現

//符合的記錄,則查找失敗。

#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(keyST.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;

}

c語言順序查找

在這個程序中,輸入的10個數字,是以空格 隔開的。如果想用逗號隔開,會比較麻煩。

既然上面是空格隔開的,下面倒數第三行printf(“%d in %d”,key,i);key和i用空格隔開不用逗號是不行的。這是程序語句規定的,各輸出項之間必須要用逗號分隔。這個與上面所說的運行時輸入各數據用什麼分隔(它是可以指定的)是兩碼事。

C語言順序查找;

#includestdio.h

#includestring.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;xstrlen(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語言順序查找程序?

#includestdio.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;i10;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表示找不到

}

c語言順序查找法

如果是在已有n個元素的數組a中順序查找值為x的元素,以下是實現查找的函數代碼,查找成功則返回此元素的位置,否則返回-1:

int find(int a[],int n,int x)

{int i;

for(i=0;ina[i]!=x;i++);

return in?i:-1;

}

用C語言編寫順序查找和二分查找(折半查找)

#include stdio.h

#define LENGTH 20

void SequenceSearch(int *fp,int Length);

void Search(int *fp,int length);

void Sort(int *fp,int length);

void main()

{

 int count;

 int arr[LENGTH];

 printf(“請輸入你的數據的個數:\n”);

 scanf(“%d”,count);

 printf(“請輸入%d個數據\n”,count);

 for(int i=0;icount;i++)

 {

  scanf(“%d”,arr[i]);

 }

 

 int choise=0;

 do 

 { 

  printf(“1.使用順序查詢.\n2.使用二分查找法查找.\n3.退出\n”);

  scanf(“%d”,choise);

  if(choise==1)

   SequenceSearch(arr,count);

  else if(choise==2)

   Search(arr,count);

  else if(choise==3)

   break; 

 } while (choise==1||choise==2||choise==3);

}

void SequenceSearch(int *fp,int Length)

{

 int data;

 printf(“開始使用順序查詢.\n請輸入你想要查找的數據.\n”);

 scanf(“%d”,data);

 for(int i=0;iLength;i++)

  if(fp[i]==data)

  {

   printf(“經過%d次查找,查找到數據%d.\n”,i+1,data);

   return ;

  }

 

 printf(“經過%d次查找,未能查找到數據%d.\n”,i,data);

}

void Search(int *fp,int length)

{

 int data;

 printf(“開始使用順序查詢.\n請輸入你想要查找的數據.\n”);

 scanf(“%d”,data);

 printf(“由於二分查找法要求數據是有序的,現在開始為數組排序.\n”);

 Sort(fp,length);

 printf(“數組現在已經是從小到大排列,下面將開始查找.\n”);

 int bottom,top,middle;

 bottom=0;

 top=length;

 

 int i=0;

 while (bottom=top)

 {

  middle=(bottom+top)/2;

  i++;

  if(fp[middle]data)

  {

   bottom=middle+1;

  }

  else if(fp[middle]data)

  {

   top=middle-1;

  }

  else

  {

   printf(“經過%d次查找,查找到數據%d.\n”,i,data);

   return;

  }

 }

 printf(“經過%d次查找,未能查找到數據%d.\n”,i,data);

}

void Sort(int *fp,int length)

{

 printf(“現在開始為數組排序,排列結果將是從小到大.\n”);

 

 int temp;

 for(int i=0;ilength;i++)

  for(int j=0;jlength-i-1;j++)

   if(fp[j]fp[j+1])

   {

    temp=fp[j];

    fp[j]=fp[j+1];

    fp[j+1]=temp;

   }

   

   printf(“排序完成!\n下面輸出排序後的數組:\n”);

   for(int k=0;klength;k++)

   {

    printf(“%5d”,fp[k]);

   }

   printf(“\n”);

   

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295466.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-27 12:56
下一篇 2024-12-27 12:56

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29

發表回復

登錄後才能評論