当前位置:文档之家› 数据结构实验题参考答案[]

数据结构实验题参考答案[]

【实验题】
1.狐狸逮兔子
围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,以后如此类推,次数不限。

”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。

问兔子究竟藏在哪个洞里?
(提示:这实际上是一个反复查找线性表的过程。


【数据描述】
定义一个顺序表,用具有10个元素顺序表来表示这10个洞。

每个元素分别表示围着山顶的一个洞,下标为洞的编号。

#define LIST_INIT_SIZE 10 lem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(Elem Type));
if(!((*L).elem)) return OVERFLOW; /* 存储分配失败*/
(*L).length=0; /*空表长度为0 */
(*L).listsize=LIST_INIT_SIZE; /*初始存储容量*/
return OK;
} /*InitList_Sq */
status Rabbit(SqList *L){
/*构造狐狸逮兔子函数*/
int i,current=0; /*定义一个当前洞口号的记数器,初始位置为第一个洞口*/ for(i=0;i<LIST_INIT_SIZE;i++)
(*L).elem[i]=1; /*给每个洞作标记为1,表示狐狸未进之洞*/ (*L).elem[LIST_INIT_SIZE-1]=0;
(*L).elem[0]=0; /*第一次进入第一个洞,标记进过的洞为0 */
for(i=2;i<=1000;i++)
{ current=(current+i)%LIST_INIT_SIZE;/*实现顺序表的循环引用*/ (*L).elem[current]=0; /* 标记进过的洞为0 */
}/*第二次隔1个洞找,第三次隔2个洞找,以后如此类推,经过一千次*/ printf("\n兔子可能藏在如下的洞中:") ;
for(i=0;i<LIST_INIT_SIZE;i++)
if((*L).elem[i]==1)
printf(" \n此洞是第%d号洞",i+1);/*输出未进过的洞号*/
return OK;
}
void main()
{
SqList *L;
InitList_Sq(L);
Rabbit(L);
getch();
}
【测试数据】
最后的输出结果为:2 4 7 9
【说明】
本算法思路比较简单,采用了顺序表表示围着山顶的10个洞,首先对所有洞设置标志为1,然后通过1000次循环,对每次所进之洞修改标志为0,最后输出标志为1的洞。

2.银行客户
某银行有一个客户办理业务站,在单位时间内随机地有客户到达,设每位客户的业务办理时间是某个范围内的随机值。

设只有一个窗口,一位业务人员,要求程序模拟统计在设定时间内,业务人员的总空闲时间和客户的平均等待时间。

假定模拟数据已按客户到达的先后顺序依次存于某个正文数据文件中。

对应每位客户有两个数据,到达时间和需要办理业务的时间。

复习概念:
与栈相对应,队列是一种先进先出的线性表。

它只允许在表的一端进行插入,而在另一端进行删除元素。

允许插入的一端称队尾,允许删除的一端称队头。

插入与删除分别称为入队与出队。

队列示意图见图3-2:
出队 ←a1 a2 …… an-1 ←an 进队
队头 队尾
【数据描述】
typedef struct{
int arrive;
int treat;6.2f ;
printf("\n 字符串查找\n 设源字符串 \"%s\"\n",str1);
printf("请输入要查找的字符串:");
gets(str2);
result=StrIndexOf(str1,str2);
if(result==-1) {
printf("查找不到你输入的字符串!"); }
else
{
printf("查找到你输入的字符串!开始位置 %d",result+1);
}
break;
}
}
}
张德、陈氏 张文、刘氏 张武、王氏 张兵、李氏 张强 张华 张兵 张德 张武 张文 李氏 张强 陈氏
刘氏 王氏 张华。

相关主题