int LCA( Tree T, int u, int v )
{
定义Tree BST=T,BRT=T
if(T不为空)
{
通过BST遍历树查找u,如果BST为空,返回ERROR
通过BRT遍历树查找v,如果BRT为空,返回ERROR
if(树中值大于u同时小于v或者小于u同时大于v)
{
找到最近公共祖先,返回树中的值
}
else if(树中值同时大于u和v)
{
递归进右子树寻找最近公共祖先
return LCA(T->Right,u,v)
}
else if(树中值同时小于u和v)
{
递归进左子树寻找最近公共祖先
return LCA(T->Left,u,v)
}
}
#include<iostream>
#include<map> 使用map
#include<string>
定义map<string,string>QQ
for i=0 to count
{
输入命令order以及账号number和密码code,number作为map的关键字,code作为关键字对应的内容
if(order==‘N‘)
{
如果map容器QQ中找不到number,注册账号QQ[number]=code,输出New: OK
否则输出ERROR: Exist
}
if(order==‘L‘)
{
如果map容器QQ中找不到number,输出ERROR: Not Exist
或者如果账号密码匹配,输出Login: OK
或者如果密码错误,输出ERROR: Wrong PW
}
}
#include<iostream>
#include<stdio.h>
#include<map>
#include<string>
using namespace std
int main
{
定义map<string,int>airplan
for i=0 to count
{
输入身份证number和飞行里程mileage
如果map容器airplan中找不到number,则初始化airplan[number]=0;
如果飞行里程mileage小于最低里程K,则让行里程mileage等于K
最后飞行里程求和
}
while(count--)
{
输入身份证number
如果map容器airplan中存在number作为关键字的记录,则输出对应的内容
否则输出No Info
}
}
//采用除数取留法确定地址,利用线性开放地址法处理冲突问题
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <math.h>
#include<time.h>
#define HASHSIZE 15
#define NULLKEY -32768
typedef struct
{
int *elem; //数据元素存储地址
int count;//当前元素个数
}HashTable;
int L = 0; //表的长度
bool init(HashTable *hashTable)//哈希表的初始化
{
int i;
L = HASHSIZE;
hashTable->elem = (int*)malloc(L*sizeof(int));//申请内存
hashTable->count = L;
for (i = 0; i < L; i++)
{
hashTable->elem[i]=NULLKEY;
}
return true;
}
//哈希函数,除留余数法,最常用的哈希函数,还有其它的。
int Hash(int data)
{
return data%L;
}
void insert( HashTable *hashTable, int data)
{
int Addr = Hash(data);//求哈希地址
while (hashTable->elem[Addr] != NULLKEY)//求得地址不是初始化时的空,则表示有元素已经插入,会有冲突
{
Addr = (Addr + 1) % L;//开放地址线性探测,还可以二次探测
}
hashTable->elem[Addr] = data;
}
int find(HashTable *hashTable, int data)
{
int Addr = Hash(data);
while (hashTable->elem[Addr] != data)
{
Addr = (Addr + 1) % L;
if (hashTable->elem[Addr] == NULLKEY || Addr == Hash(data)) //找到空的指针或者遍历一遍回到起点说明找不到元素
return 0;
}
return Addr;
}
void display(HashTable *hashTable)
{
int i;
printf(".........结果展示.........\n");
for (i = 0; i < hashTable->count; i++)
{
printf("%d\n", hashTable->elem[i]);
}
}
void main()
{
int i, j, result, x;
HashTable hashTable;
int arr[HASHSIZE];
printf("请输入少于15个,初始化哈希表的元素:\n");
for (j = 0; j < HASHSIZE; j++)
{
scanf("%d", &arr[j]);
}
init(&hashTable); //初始化哈希表
for (i = 0; i < HASHSIZE; i++)
{
insert(&hashTable, arr[i]);
}
display(&hashTable);
printf("请输入你要查找的元素:\n");
scanf("%d", &x);
result = find(&hashTable, x);
if (result)
printf("查找元素%d在哈希表中的位置为%d\n",x,result);
else
printf("没找到!\n");
}
原文:https://www.cnblogs.com/wlgczjw/p/9090678.html