當前位置:編程學習大全網 - 編程語言 - 編程實現順序查找及二分查找<著急啊>

編程實現順序查找及二分查找<著急啊>

//修改好了,我用的VS2008,所以頭文件用的是註釋裏邊的。

//錯誤大概有三:頭文件後邊要有using namespace std;main函數要有返回值;

//建表函數的第壹個參數應該是ST的引用,不能是新建的ST表。

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

//#include <stdio.h>

//#include <cstdlib>

//#include "malloc.h"

using namespace std;

typedef struct//元素定義

{

int key;

}ElemType;

typedef struct{ //定義靜態查找表類型

ElemType *elem;//表基址,elem[0]留空

int n; //表長

}SSTable;

void CreateTable(SSTable &ST, ElemType *A, int n)

{ //建立靜態查找表

int i;

unsigned int Size;

Size = (n+1) * sizeof(ElemType); //分配空間字節數(因elem[0]留空,故需n+1個空間)

ST.elem = (ElemType *)malloc(Size);

ST.n = n;

for (i = 1; i <= n; i++)

ST.elem[i] = A[i-1];

}

int Search_Seq(SSTable ST, int k)

{ //順序查找:在順序表ST中找關鍵字為k的記錄,若成功則返回記錄位置,否則返回0

int j;

j = ST.n; //從表高端開始查找

ST.elem[0].key = k; //崗哨

while(ST.elem[j].key != k)

{

j--;

}

return j;

}

int Search_Bin(SSTable ST, int k)

{ //二分查找:在升序表ST中查找鍵值等於k的元素,若查找成功,返回該元素的位置號,否則返回0

int low, hig, mid;

low = 1; //低

hig = ST.n; //高

while(low <= hig)

{

mid = (low + hig) / 2;//MID

if(k == ST.elem[mid].key)

return mid;

else if(k < ST.elem [mid].key)

hig = mid - 1;

else

low = mid + 1;

}

return 0;

}

void ShowTable(SSTable ST)

{//顯示表

int i, n;

n = ST.n;

printf("\n位置: ");

for (i = 1; i <= n; i++)

printf("%4d", i);

printf("\n元素: ");

for (i = 1; i <= n; i++)

printf("%4d", ST.elem[i]);

printf("\n表長: %4d\n", ST.n);

}

int main()

{

int k1,k2;

int i,i1,i2;

SSTable ST;

ElemType A[4];

int n=4; //表長為4

printf("輸入表元素A[1..4]: ");

for(i=0;i<n;i++)

scanf("%d",&A[i]);

CreateTable(ST, A, n); //建立靜態查找表ST

printf("關鍵字表: ");

ShowTable(ST);

printf("\n");

printf("輸入查詢的關鍵字k:");

scanf("%d",&k1);

i1 = Search_Seq(ST, k1);

printf("關鍵字為%2d的位置為%2d\n", k1, i1);

printf("輸入查詢的關鍵字k:");

scanf("%d",&k2);

i2 = Search_Bin(ST, k2);

printf("關鍵字為%2d的位置為%2d\n", k2, i2);

return 0;

}

  • 上一篇:套接字編程介紹
  • 下一篇:誰給我個數控車床的編程代碼
  • copyright 2024編程學習大全網