1 / 15
文档名称:

数据结构课程设计-插队买票(共15页).doc

格式:doc   大小:64KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构课程设计-插队买票(共15页).doc

上传人:bai1968104 2022/3/20 文件大小:64 KB

下载得到文件列表

数据结构课程设计-插队买票(共15页).doc

相关文档

文档介绍

文档介绍:精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
数h[CurrentPos].info)&&(strcmp(hash[CurrentPos].name,c)==0))
hashedx=1;
else /*元素不在散列表里*/
hashedx=0;
return CurrentPos;/*返回在散列表中的位置*/
}
用平方探测法处理冲突
第二个问题关于怎么操作“ENQUEUE”和“DEQUEUE”命令。这可以用队列来模拟。由于有插队现象的存在,不能单纯地用一个数组来表示队列,因为这样的话,插入一个朋友,则他后面的人都要往后移一个单位,删除一个人,则他后面的人都要前移一个,会降低效率。所以,采用一个Index标记来表示当前元素的后继元素,最后一个单元的后继元素是第0个,形成环,数据结构如下图所示。不用链表是因为链表存放指针也需要空间,并且链表插入、删除的效率没有数组高。
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
typedef struct Que *PtrToQue;
struct Que{
long int HashVal; /*散列值*/
long int Index; /*在中的队列序号*/
};
数据结构:队列
输入ENQUEUE命令,如果队伍里有朋友,则排在朋友后面;如果没有遇到朋友,则排到队尾。入队时,用一个数组记录每个朋友组的最后一位,以便下一个朋友到来时排到他后面,这个数组被称为“插入数组”。
输入“DEQUEUE”命令,则根据“先进先出”,按照各个元素和它后继元素的先后顺序,每次删除队列中的第一个。程序结构如下图所示。
While(读测试文件)
{
if(输入“ENQUEUE”)
{读入名字;
插入散列表;
插入队列;
}
else if(输入“DEQUEUE”)
{删除队列第一个名字;
将该名字输出到文件;
}
Else stop;
}
入队、出队操作
3 设计实现
#include<>
#include<>
#include<>
#define TabSize /*散列表大小TabSize 是大于表最大空间的素数*/
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
#define Max /*队列空间最大值*/
struct hashtab;
typedef struct hashtab *PtrToHash;
struct hashtab /*散列表数据结构*/
{
char name[5]; /*名字*/
int group; /*属于哪个朋友组*/
char info; /*标志位,该单元是否被占用*/
};
struct Que;
typedef struct Que *PtrToQue;
struct Que /*队列数据结构*/
{
long int HashVal; /*散列值*/
long int Index; /*在中的队列序号*/
};
int hashedx=0; /*标记元素是否已经在散列表里*/
long int Find(PtrToHash hash,char *c) /*查找在散列表中的位置*/
{
char *key;
long int CurrentPos,CollisionNum;

key=c;
for(CurrentPos=0;*key;++key) /*散列函数,计算散列值*/
CurrentPos=(CurrentPos<<6)+*key;
CurrentPos