猫吃老鼠问题

昨天去参加一笔试,一题目是猫吃老鼠问题:有N个老鼠,排成一队,按顺序,1,2....N  。一只猫从任意位置开始吃,每隔一个吃一个,循环吃。例如:

老鼠有1,2,3,4,5,6,7个,从第二个开始吃,则吃的顺序为:2,4,6,1,5,3,7

由于我没学过数据结构,对算法不了解,所以想用C#去实现。但想了半天也没个好的解决办法。于是,今天找了本数据结构的书看了看,用双向链表好实现。

思路:1.先定义一个双向循环链表,链表的每个节点的value为老鼠的编号。

         2.删除链表中的节点(每膈一个删除一个)

下面代码只是大概思路,没有经过编译,如果有误,希望大家提出。

代码
 1 1. typedef struct Mouse
2
3 {
4 int number;
5 struct Mouse *prior;
6 struct Mouse *next;
7 } MouseNode,*MouseLink;
8
9 MouseLink GetBeginMouseNode(MouseLink *L,int i)
10 {
11 MouseLink p;
12 p=*L;
13 while( p->value !=i)
14 {
15 p=p->next;
16 }
17 retrun p;
18
19 }
20 int GetLastMouse(MouseLink L,int i)
21 {
22
23 MouseLink p=q=GetBeginMouseNode(&L,i); //
24 whlie(q->next !=q->prior)
25 {
26 p->prior->next=p->next;
27 p->next-prior=p->prior;
28 q=q->next->next;
29 free(p);
30 p=q;
31 }
32 retrun q->value;
33 }
34
35
36
37

 

 

posted on 2011-11-24 14:15  静海  阅读(741)  评论(0编辑  收藏  举报