实现一个链表类
链表类
1 class linknode
2 {
3 public int data;
4 public linknode next;
5 public bool deleted;
6 public linknode()
7 {
8 data = -1;
9 next = null;
10 deleted=false;
11 }
12
1 class linknode
2 {
3 public int data;
4 public linknode next;
5 public bool deleted;
6 public linknode()
7 {
8 data = -1;
9 next = null;
10 deleted=false;
11 }
12
链表类
1 class linkList
2 {
3 public int length;
4 public linknode next;
5 public linkList()
6 {
7 //初始化
8 this.length = 0;
9 next = null;
10 }
11
12 public void add(int num)
13 {
14 linknode s = new linknode();
15 s.data = num;
16 s.next = next;
17 next = s;
18 //if (length == 0)
19 //{
20 // next = s;
21 //}
22 //else
23 //{
24 // linknode p = next;
25 // while (p.next != null)
26 // {
27 // p = p.next;
28 // }
29 // p.next = s;
30 //}
31 length++;
32 }
33
34 public void del(int i)
35 {
36 //删去指定位置元素,从0开始
37
38
39 if (i == 0)
40 {
41 next.deleted = true;
42 }
43 else
44 {
45 linknode p=next;
46 for (; i > 0; i--)
47 {
48 p = p.next;
49 }
50 p.deleted = true;
51 }
52 length--;
53
54
55 }
56
57 public void display()
58 {
59 Console.WriteLine("输出链表:");
60 if (next == null)
61 {
62 Console.WriteLine("链表为空!");
63 }
64 else
65 {
66 linknode s=next;
67 while(s!=null)
68 {
69 if(!s.deleted)
70 {
71 Console.Write(s.data);
72 }
73 s=s.next;
74 }
75 }
76 }
77
78 public void init()
79 {
80 int i = 0;
81 linknode p = next;
82 while (p != null)
83 {
84 i++;
85 p.deleted = false;
86 p = p.next;
87 }
88 length = i;
89 }
90
91
92
1 class linkList
2 {
3 public int length;
4 public linknode next;
5 public linkList()
6 {
7 //初始化
8 this.length = 0;
9 next = null;
10 }
11
12 public void add(int num)
13 {
14 linknode s = new linknode();
15 s.data = num;
16 s.next = next;
17 next = s;
18 //if (length == 0)
19 //{
20 // next = s;
21 //}
22 //else
23 //{
24 // linknode p = next;
25 // while (p.next != null)
26 // {
27 // p = p.next;
28 // }
29 // p.next = s;
30 //}
31 length++;
32 }
33
34 public void del(int i)
35 {
36 //删去指定位置元素,从0开始
37
38
39 if (i == 0)
40 {
41 next.deleted = true;
42 }
43 else
44 {
45 linknode p=next;
46 for (; i > 0; i--)
47 {
48 p = p.next;
49 }
50 p.deleted = true;
51 }
52 length--;
53
54
55 }
56
57 public void display()
58 {
59 Console.WriteLine("输出链表:");
60 if (next == null)
61 {
62 Console.WriteLine("链表为空!");
63 }
64 else
65 {
66 linknode s=next;
67 while(s!=null)
68 {
69 if(!s.deleted)
70 {
71 Console.Write(s.data);
72 }
73 s=s.next;
74 }
75 }
76 }
77
78 public void init()
79 {
80 int i = 0;
81 linknode p = next;
82 while (p != null)
83 {
84 i++;
85 p.deleted = false;
86 p = p.next;
87 }
88 length = i;
89 }
90
91
92
实现代码:
主代码
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 linkList correctList = new linkList();
6 linkList answerList = new linkList();
7 Random rd = new Random();
8 int n;//表示答案为n阶数字
9 Console.WriteLine("开始猜谜游戏,请输入您希望玩的游戏阶数:");
10 n = int.Parse(Console.ReadLine());
11
12 for (int i = 0; i < n; i++)
13 {
14 correctList.add(rd.Next(0, 10));
15 }
16 correctList.display();
17 int tryNum = 6;
18 while (tryNum > 0)
19 {
20 Console.WriteLine("\n第{0}次尝试:",7-tryNum);
21 Console.WriteLine("请输入您要猜的数字,不必隔开;");
22 string answerString = Console.ReadLine();
23 int num = int.Parse(answerString);
24 for (int i = 0; i < n; i++)
25 {
26 int insertNum = num % 10;
27 num = num / 10;
28 answerList.add(insertNum);
29 }
30 int a = 0, b = 0;
31 correctList.init();
32 compare(correctList, answerList, ref a, ref b);
33 Console.Write("{0}A{1}B", a, b);
34 if (a == n)
35 {
36 Console.WriteLine("恭喜您猜对了所有数字!!!");
37 break;
38 }
39 tryNum--;
40 if (tryNum == 0)
41 Console.WriteLine("很遗憾,您没有猜对数字!请下次尝试!");
42 }
43 }
44
45 public static void compare(linkList clist,linkList alist, ref int a, ref int b)
46 {
47 //clist为正确答案,alist为回答答案;等下测试引用类型在函数中会不会被修改!!!
48 a = 0; b = 0;
49 int n = clist.length;
50 linknode cnode=clist.next;
51 linknode anode=alist.next;
52
53 for (int i = 0; i < n; i++)
54 {
55 if (anode.data == cnode.data)
56 {
57 a++;
58 clist.del(i);
59 alist.del(i);
60 //判断了a的数目
61 }
62 anode = anode.next;
63 cnode = cnode.next;
64 }
65 //第二轮遍历,获取B的数目
66 if (a < n)
67 {
68 linknode p = alist.next;
69 while (p != null)
70 {
71
72 if (!p.deleted)
73 {
74 linknode c = clist.next;
75 while (c != null)
76 {
77 if (!c.deleted)
78 {
79 if (p.data == c.data)
80 {
81 b++;
82 p.deleted = true;
83 alist.length--;
84 c.deleted = true;
85 clist.length--;
86 break;
87 }
88 }
89 c = c.next;
90 }
91 }
92 p = p.next;
93 }
94 }
95 else
96 {
97 b = 0;
98 }
99 }
100
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 linkList correctList = new linkList();
6 linkList answerList = new linkList();
7 Random rd = new Random();
8 int n;//表示答案为n阶数字
9 Console.WriteLine("开始猜谜游戏,请输入您希望玩的游戏阶数:");
10 n = int.Parse(Console.ReadLine());
11
12 for (int i = 0; i < n; i++)
13 {
14 correctList.add(rd.Next(0, 10));
15 }
16 correctList.display();
17 int tryNum = 6;
18 while (tryNum > 0)
19 {
20 Console.WriteLine("\n第{0}次尝试:",7-tryNum);
21 Console.WriteLine("请输入您要猜的数字,不必隔开;");
22 string answerString = Console.ReadLine();
23 int num = int.Parse(answerString);
24 for (int i = 0; i < n; i++)
25 {
26 int insertNum = num % 10;
27 num = num / 10;
28 answerList.add(insertNum);
29 }
30 int a = 0, b = 0;
31 correctList.init();
32 compare(correctList, answerList, ref a, ref b);
33 Console.Write("{0}A{1}B", a, b);
34 if (a == n)
35 {
36 Console.WriteLine("恭喜您猜对了所有数字!!!");
37 break;
38 }
39 tryNum--;
40 if (tryNum == 0)
41 Console.WriteLine("很遗憾,您没有猜对数字!请下次尝试!");
42 }
43 }
44
45 public static void compare(linkList clist,linkList alist, ref int a, ref int b)
46 {
47 //clist为正确答案,alist为回答答案;等下测试引用类型在函数中会不会被修改!!!
48 a = 0; b = 0;
49 int n = clist.length;
50 linknode cnode=clist.next;
51 linknode anode=alist.next;
52
53 for (int i = 0; i < n; i++)
54 {
55 if (anode.data == cnode.data)
56 {
57 a++;
58 clist.del(i);
59 alist.del(i);
60 //判断了a的数目
61 }
62 anode = anode.next;
63 cnode = cnode.next;
64 }
65 //第二轮遍历,获取B的数目
66 if (a < n)
67 {
68 linknode p = alist.next;
69 while (p != null)
70 {
71
72 if (!p.deleted)
73 {
74 linknode c = clist.next;
75 while (c != null)
76 {
77 if (!c.deleted)
78 {
79 if (p.data == c.data)
80 {
81 b++;
82 p.deleted = true;
83 alist.length--;
84 c.deleted = true;
85 clist.length--;
86 break;
87 }
88 }
89 c = c.next;
90 }
91 }
92 p = p.next;
93 }
94 }
95 else
96 {
97 b = 0;
98 }
99 }
100
把生成的随机答案和输入的答案放在链表中,遍历两次,一次统计A的数目,一次统计B的数目!
这个程序,为了通用性,牺牲了很大的性能!
是个教训!