顺序查找
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct {
ElemType* elem;
int TableLen;
}SSTable;
void ST_Init(SSTable &ST,int len){
ST.TableLen = len + 1;
ST.elem = (ElemType*)malloc(sizeof(ElemType)*ST.TableLen);
int i;
srand(time(NULL));
for(i = 1; i < ST.TableLen; i++){
ST.elem[i] = rand() % 100;
}
}
int Search_Seq(SSTable ST,ElemType key){
ST.elem[0] = key;
int i;
for(i = ST.TableLen - 1;ST.elem[i] != key;--i);
return i;
}
void ST_print(SSTable ST){
for(int i = 0;i < ST.TableLen;i++){
printf("%3d",ST.elem[i]);
}
printf("\n");
}
int main()
{
SSTable ST;
ElemType key;
int pos;
ST_Init(ST,10);
ST_print(ST);
printf("请输入要搜索的key值:\n");
scanf("%d",&key);
pos = Search_Seq(ST,key);
if(pos)
{
printf("查找成功 位置为 %d\n",pos);
}else{
printf("查找失败\n");
}
return 0;
}
二分查找
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct{
ElemType* elem;
int TableLen;
}SSTable;
void ST_Init(SSTable& ST,int len)
{
ST.TableLen = len;
ST.elem = (ElemType*)malloc(sizeof(ElemType)* ST.TableLen);
int i;
srand(time(NULL));
for(i = 0; i < ST.TableLen; i++){
ST.elem[i] = rand()%100;
}
}
void ST_print(SSTable ST){
for(int i = 0;i < ST.TableLen;i++)
{
printf("%3d",ST.elem[i]);
}
printf("\n");
}
int BinarySearch(SSTable L,ElemType key)
{
int low = 0,high = L.TableLen - 1,mid;
while(low <= high){
{
mid = (low + high)/2;
if(L.elem[mid] == key){
return mid;
}else if(L.elem[mid]>key){
high = mid - 1;
}else{
low = mid + 1;
}
}
}
return -1;
}
int compare(const void *left,const void* right){
return *(ElemType*)left - *(ElemType*)right;
}
int main()
{
SSTable ST;
ElemType key;
int pos;
ST_Init(ST,10);
qsort(ST.elem,ST.TableLen,sizeof(ElemType),compare);
ST_print(ST);
printf("二分查找,请输入要搜索的key值:\n");
scanf("%d",&key);
pos = BinarySearch(ST,key);
if(pos!=-1){
printf("查找成功 位置为%d\n",pos);
}else{
printf("查找失败\n");
}
return 0;
}
二叉排序查找删除
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
typedef struct BSTNode{
ElemType data;
BSTNode *lchild,*rchild;
}BSTNode,*BiTree;
int BST_Insert(BiTree &T,int k){
if(T == NULL){
T = new BSTNode;
T->data = k;
T->lchild = NULL;
T->rchild = NULL;
return 1;
}else if(T->data == k){
return 0;
}else if(T->data > k){
return BST_Insert(T->lchild,k);
}else{
return BST_Insert(T->rchild,k);
}
}
void Create_Tree(BiTree &T,int l[],int len){
int i ;
T = NULL;
for(i=0; i < len; i++){
BST_Insert(T,l[i]);
}
}
void InOrder(BiTree T){
if(T != NULL){
InOrder(T->lchild);
cout<<T->data<<" ";
InOrder(T->rchild);
}
}
BiTree BST_Search(BiTree T,ElemType x){
while(T!=NULL&&T->data!=x){
if(T->data > x){
T = T->lchild;
}else{
T = T->rchild;
}
}
return T;
}
void DeleteNode(BiTree &root, ElemType x){
if(root == NULL){
return;
}else if(root->data > x){
DeleteNode(root->lchild,x);
}else if(root->data < x){
DeleteNode(root->rchild,x);
}else{
if(root->lchild == NULL){
BSTNode *temp = root;
root = root->rchild;
delete temp;
}else if(root->rchild == NULL){
BSTNode *temp = root;
root = root->lchild;
delete temp;
}else{
BSTNode *temp = root->lchild;
while(temp->rchild!=NULL){
temp = temp->rchild;
}
root->data = temp->data;
DeleteNode(root->lchild,temp->data);
}
}
}
int main()
{
BiTree T;
int l[10];
cout<<"请输入十个数字:";
for(int i = 0; i< 10;i++){
cin>>l[i];
}
cout<<"数组中的数字为:"<<endl;
for(int i = 0; i< 10;i++){
cout<<l[i]<<" ";
}
int len = 10;
Create_Tree(T,l,len);
cout<<endl;
InOrder(T);
BSTNode *search;
cout<<endl<<"请您输入要查找的数:";
int x;
cin>>x;
search = BST_Search(T,x);
if(search){
cout<<"二叉树中存在"<<x<<endl;
}else{
cout<<"查无该值!"<<endl;
}
cout<<"请输入要删除的值:";
cin>>x;
DeleteNode(T,x);
InOrder(T);
return 0;
}