⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myhash.cpp

📁 这个是用C++开发的系统,我曾经做的一个数据结构的大作业来的,叫航空订票系统.
💻 CPP
字号:
//基于数组的HASH类,用于存放航班信息
#include"flight.h"
Hash::Hash(char**key, int size,char**key2){  //构造函数,导入关键字表
	keysize=size; maxsize=7*keysize;
	kt1=key;   //目的地关键字表
	kt2=key2;  //飞行日关键字表
	ht=new list_node*[maxsize];              //创建HASH总表,存放不同目的地不同飞行日航班
	for(int i=0;i<maxsize;i++)ht[i]=NULL;    //初始化HASH表
}

Hash::~Hash(){                               //析构函数,释放HASH表内容
	for(int i=0;i<maxsize;i++)
		for(list_node*temp=ht[i];temp!=NULL;){
			ht[i]=ht[i]->next;
			delete temp;
			temp=ht[i];
		}
}

bool Hash::hash_insert(airline&line){        //插入航班信息
	int i=line.getDes()*7+line.getDay();
	if(i>=maxsize)return false;              //目标超出HASH表大小
	list_node*elem=new list_node;            //创建新节点
	elem->next=NULL;
	elem->data=new airline(line);            //创建节点元素并赋值
	if(ht[i]==NULL){                         //链表为空,直接插入新元素
		ht[i]=elem;
		return true;
	}
	if(ht[i]->data->getHour()>line.getHour()){//在头节点插入元素 
		elem->next=ht[i];
		ht[i]=elem;
		return true;
	}
	list_node*temp=ht[i];
	while(temp->next!=NULL&&temp->next->data->getHour()<line.getHour())
		temp=temp->next;                      //查找插入位置
	if(temp->next==NULL)temp->next=elem;      //在尾节点插入元素
	else{                                     //在链表中插入元素
		elem->next=temp->next;
		temp->next=elem;
	}
	return true;
}

bool Hash::hash_search(int key){                //根据目的地查询
	if(key*7>=maxsize)return false;
	int count=0;                                  //记数变量,记录航班数
	for(int i=key*7;i<key*7+7;i++)              //查找一周内到该目的地的全部航班
		for(list_node*temp=ht[i];temp!=NULL;temp=temp->next){
			temp->data->printall(kt1,kt2);      //显示航班信息
			count++;                            //存在相关航班时,计数器加一
		}
	if(count)return true;
	else 
	{cout<<"no flight."<<endl;return false;}
}

bool Hash::hash_search(int key1,int key2){      //根据目的地及飞行日查询
	if(key1*7+key2>=maxsize)return false;
	if(ht[key1*7+key2]==NULL){cout<<"no flight"<<endl;return false;}
	for(list_node*temp=ht[key1*7+key2];temp!=NULL;temp=temp->next)//查找当天出发的全部航班
		temp->data->printall(kt1,kt2);          //显示航班信息
	return true;
}

airline* Hash::hash_find(int key1,int key2,int key3){//根据客户选择返回所需航班
	for(list_node*temp=ht[key1*7+key2];temp!=NULL&&temp->data->getplane()!=key3;temp=temp->next);
	if(temp==NULL)return NULL;
	else return temp->data;
}

bool Hash::hash_remove(int key1,int key2,int key3){//删除指定航班
	if(key1*7+key2>=maxsize)return false;
	if(ht[key1*7+key2]==NULL){cout<<"no flight"<<endl;return false;}
	if(ht[key1*7+key2]->data->getplane()==key3){//当要删除的航班位于头节点时
		list_node*temp=ht[key1*7+key2];
		ht[key1*7+key2]=temp->next;
		delete temp;
		cout<<"finished!"<<endl;
		return true;
	}
	for(list_node*temp=ht[key1*7+key2];temp->next!=NULL&&temp->next->data->getplane()!=key3;temp=temp->next);//位于一般节点时
	if(temp->next==NULL){cout<<"no flight"<<endl;return false;}//未找到相应航班
	else{
		list_node*temp2=temp->next;
		temp->next=temp2->next;
		delete temp2;
		cout<<"finished!"<<endl;
		return true;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -