最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之 折半查找實(shí)例詳解

 更新時(shí)間:2017年06月21日 09:34:34   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之 折半查找實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

數(shù)據(jù)結(jié)構(gòu) 折半查找

實(shí)例代碼:

/* 
  名稱:折半查找  
  語(yǔ)言:數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版  
  編譯環(huán)境:VC++ 6.0 
  日期: 2014-3-26  
*/ 
 
#include <stdio.h> 
#include <malloc.h> 
#include <windows.h> 
 
 
#define N 11 // 數(shù)據(jù)元素個(gè)數(shù)  
 
typedef int KeyType; // 設(shè)關(guān)鍵字域?yàn)檎? 
 
typedef struct // 數(shù)據(jù)元素類型  
{ 
  KeyType key;  // 關(guān)鍵字域  
  int others;   // 其它部分  
 }ElemType; 
 
 
// Search_Seq.h 靜態(tài)查找表的順序存儲(chǔ)結(jié)構(gòu)  
typedef struct 
{ 
  // 數(shù)據(jù)元素存儲(chǔ)空間基址,建表時(shí)按實(shí)際長(zhǎng)度分配,0號(hào)單元留空 
  ElemType *elem; 
  int length; // 表長(zhǎng)度  
}SSTable; 
 
ElemType r[N]={ 
  {05,1},{13,2},{19,3},{21,4}, 
  {37,5},{56,6},{64,7},{75,8}, 
  {80,9},{88,10},{92,11} 
}; // 數(shù)據(jù)元素(以教科書P219的數(shù)據(jù)為例),全局變量  
 
 
// 靜態(tài)查找表(順序表和有序表)的基本操作(7個(gè))  
 
// 構(gòu)造一個(gè)含n個(gè)數(shù)據(jù)元素的靜態(tài)順序查找表ST(數(shù)據(jù)來(lái)自全局?jǐn)?shù)組r)  
int Creat_Seq(SSTable *ST,int n) 
{  
  int i; 
  (*ST).elem = (ElemType *)calloc(n+1, sizeof(ElemType));  
  // 動(dòng)態(tài)生成n+1個(gè)數(shù)據(jù)元素空間(0號(hào)單元不用)  
  if(!(*ST).elem) 
    return 0; 
  for( i = 1; i <= n; i++) 
    *((*ST).elem+i) = r[i-1]; // 將全局?jǐn)?shù)組r的值依次賦給ST  
  (*ST).length = n; 
  return 1; 
} 
 
// 重建靜態(tài)查找表為按關(guān)鍵字非降序排序  
void Ascend(SSTable *ST) 
{   
  int i, j, k; 
  for(i = 1; i < (*ST).length; i++) 
  { 
    k = i; 
    (*ST).elem[0] = (*ST).elem[i]; // 待比較值存[0]單元  
    for(j = i+1; j <= (*ST).length; j++) //從中找到第i小的值 
      if ((*ST).elem[j].key < (*ST).elem[0].key) 
      { 
        k=j; 
        (*ST).elem[0]=(*ST).elem[j]; 
      } 
    if(k != i) // 有更小的值則交換  
    { 
      (*ST).elem[k]=(*ST).elem[i]; 
      (*ST).elem[i]=(*ST).elem[0]; 
    } 
  } 
} 
 
// 構(gòu)造一個(gè)含n個(gè)數(shù)據(jù)元素的靜態(tài)按關(guān)鍵字非降序查找表ST, 
// 數(shù)據(jù)來(lái)自全局?jǐn)?shù)組r  
int Creat_Ord(SSTable *ST,int n) 
{ 
  int f; 
  f = Creat_Seq(ST,n);  //構(gòu)建一個(gè)靜態(tài)表 
  if( f ) //靜態(tài)表存在,則對(duì)其進(jìn)行重建 
    Ascend(ST); 
  return f; 
} 
 
// 銷毀表ST  
int Destroy(SSTable *ST) 
{  
  free((*ST).elem); 
  (*ST).elem = NULL; 
  (*ST).length = 0; 
 
  return 1; 
} 
 
// 在有序表ST中折半查找其關(guān)鍵字等于key的數(shù)據(jù)元素。若找到,則函數(shù) 
// 值為該元素在表中的位置,否則為0。  
int Search_Bin(SSTable ST,KeyType key) 
{   
  int low, high, mid; 
  low = 1; // 置區(qū)間初值  
  high = ST.length; 
  while(low <= high) 
  { 
    mid = (low + high) / 2; 
    if(key == ST.elem[mid].key) // 找到待查元素  
      return mid; 
    else if(key < ST.elem[mid].key) 
      high = mid - 1;   // 繼續(xù)在前半?yún)^(qū)間進(jìn)行查找  
    else 
      low = mid + 1;   // 繼續(xù)在后半?yún)^(qū)間進(jìn)行查找  
  } 
  return 0; // 順序表中不存在待查元素  
} 
 
// 按順序?qū)T的每個(gè)元素調(diào)用函數(shù)Visit()一次且僅一次。 
int Traverse(SSTable ST,void(*Visit)(ElemType)) 
{   
  ElemType *p; 
  int i; 
   
  p = ++ST.elem; // p指向第一個(gè)元素,第0個(gè)元素沒(méi)有用  
  for(i = 1; i <= ST.length; i++) 
    Visit( *p++ ); 
   
  return 1; 
} 
 
void print(ElemType c) // Traverse()調(diào)用的函數(shù)  
{ 
  printf("(%d %d) ", c.key, c.others); 
} 
 
int main() 
{ 
  SSTable st; 
  int i; 
  KeyType s; 
   
  Creat_Ord(&st, N); // 由全局?jǐn)?shù)組產(chǎn)生非降序靜態(tài)查找表st  
  Traverse(st,print); // 順序輸出非降序靜態(tài)查找表st  
 
  printf("\n請(qǐng)輸入待查找值的關(guān)鍵字: "); 
  scanf("%d", &s); 
  i = Search_Bin(st, s); // 折半查找有序表  
  if( i ) 
    print(st.elem[i]); 
  else 
    printf("沒(méi)找到.\n"); 
 
  Destroy(&st); 
  system("pause"); 
  return 0; 
} 
 
/* 
輸出效果: 
 
(5 1) (13 2) (19 3) (21 4) (37 5) (56 6) (64 7) (75 8) (80 9) (88 10) (92 11) 
請(qǐng)輸入待查找值的關(guān)鍵字: 75 
(75 8) 請(qǐng)按任意鍵繼續(xù). . .  
 
*/  

運(yùn)行結(jié)果如下:

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C語(yǔ)言深入講解函數(shù)的使用

    C語(yǔ)言深入講解函數(shù)的使用

    各位小伙伴們,今天YU同學(xué)給大家?guī)?lái)的是與函數(shù)相關(guān)的知識(shí),本篇將會(huì)帶著大家初步認(rèn)識(shí)和調(diào)用函數(shù)來(lái)解決一些簡(jiǎn)單的問(wèn)題
    2022-04-04
  • C++強(qiáng)制類型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_cast)

    C++強(qiáng)制類型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_ca

    本文主要介紹了C++強(qiáng)制類型轉(zhuǎn)換,主要介紹了static_cast、dynamic_cast、const_cast、reinterpret_cast的4種方法,感興趣的可以了解一下
    2021-08-08
  • C語(yǔ)言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù)

    C語(yǔ)言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù)

    這篇文章主要介紹了C語(yǔ)言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言常見的文件操作函數(shù)

    C語(yǔ)言常見的文件操作函數(shù)

    這篇文章主要為大家介紹了C語(yǔ)言文件操作函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C語(yǔ)言中的編碼小技巧

    C語(yǔ)言中的編碼小技巧

    這篇文章主要介紹了C語(yǔ)言中的編碼小技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++形參與實(shí)參的區(qū)別實(shí)例解析

    C++形參與實(shí)參的區(qū)別實(shí)例解析

    這篇文章主要介紹了C++形參與實(shí)參的區(qū)別實(shí)例解析,需要的朋友可以參考下
    2014-07-07
  • 一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    這篇文章主要介紹了解析C++面對(duì)象編程--繼承的運(yùn)用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • C++ Boost Any示例分析使用

    C++ Boost Any示例分析使用

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11
  • 離線安裝visual?studio2022+QT5.12的實(shí)現(xiàn)步驟

    離線安裝visual?studio2022+QT5.12的實(shí)現(xiàn)步驟

    近期有需求離線配置C++與QT環(huán)境,本文主要介紹了離線安裝visualstudio2022+QT5.12的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • c語(yǔ)言中缺省參數(shù)的類型總結(jié)

    c語(yǔ)言中缺省參數(shù)的類型總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于c語(yǔ)言中缺省參數(shù)的類型總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-09-09

最新評(píng)論

桓台县| 安西县| 大田县| 中西区| 湘乡市| 延庆县| 山东省| 富裕县| 朝阳县| 寿阳县| 霞浦县| 额尔古纳市| 鸡泽县| 怀宁县| 百色市| 永年县| 深水埗区| 土默特右旗| 渝中区| 咸宁市| 沙湾县| 夏津县| 博爱县| 宜良县| 舟山市| 仲巴县| 定南县| 泰宁县| 万山特区| 文成县| 拜城县| 张掖市| 璧山县| 巴林右旗| 綦江县| 海伦市| 兴业县| 陇西县| 大庆市| 新丰县| 尼玛县|