C#链表问题,新手求教

try_cry 2012-09-27 01:03:30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace xxx
{
interface ILinarList<T>
{
void InsertNode_End(T a);
void InsertNode(T a, int x);
int GetLength();
}
class SLinkList<T> : ILinarList<T>
{
private SNode<T> start;
private int length;
public SLinkList()
{
start = null;
length = 0;
}
public void InsertNode_End(T a)
{
SNode<T> current;
if (start == null)
{
start = new SNode<T>(a);
length++;
return;
}
current = start;
while (current.Next != null)
{
current = current.Next;
}
current.Next = new SNode<T>(a);
length++;
}
public void InsertNode(T a, int x)
{
SNode<T> current;
SNode<T> previous = null ;
SNode<T> newNode = new SNode<T>(a);
if (x == 1)
{
newNode.Next = start;
start.Next = newNode;
length++;
return;
}
int i = 1;
current = start;
while (i != x)
{
previous = current;
current = current.Next;
}
previous.Next = newNode;
newNode.Next = current;
length++;
}
public int GetLength()
{
return length;
}
}
class SNode<T>
{
private T data;
private SNode<T> next;
public SNode(T a)
{
data = a;
next = null;
}
public T Data
{
get
{
return data;
}
set
{
data = value;
}
}
public SNode<T> Next
{
get
{
return next;
}
set
{
next = value;
}
}
}
class Stu_Node
{
private string stu_ID;
private string stu_Name;
private int stu_Score;
public Stu_Node(string stu_ID, string stu_Name, int stu_Score)
{
this.stu_ID = stu_ID;
this.stu_Name = stu_Name;
this.stu_Score = stu_Score;
}
public override string ToString()
{
return stu_ID + stu_Name;
}
}
class Program
{
static void Main(string[] args)
{
ILinarList<SNode<Stu_Node>> stu_list = null;
char Y_N;
while (true)
{
int choice;
Console.WriteLine("有以下可执行的操作:");
Console.WriteLine("1.输入学生信息或在末尾加入学生信息");
Console.WriteLine("2.在第k个学生前插入学生信息");
Console.WriteLine("3.在指定学号或姓名的学生前插入学生信息");
Console.WriteLine("4.删除第k个学生的信息");
Console.WriteLine("5.删除指定学号或姓名的学生的信息");
Console.WriteLine("6.查看第k个学生的信息");
Console.WriteLine("7.查看指定学号或姓名的学生的信息");
Console.WriteLine("8.显示学生表信息");
Console.WriteLine("9.查看以注册信息的学生总人数");
Console.WriteLine("10.清空学生信息表");
Console.WriteLine("11.退出");
Console.Write("请选择:");
try
{
choice = Int32.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("Please enter an integer");
continue;
}

if (choice > 11 || choice < 1)
{
Console.WriteLine("Beyond the range of choice");
Console.Write("Press any key to continue...");
Console.Read();
continue;
}
else
{
switch (choice)
{
case 1:
while (true)
{
string stu_ID, stu_name;
int stu_score;
char ch;
Console.Write("请输入学生学号:");
stu_ID = Console.ReadLine();
Console.Write("请输入学生姓名:");
stu_name = Console.ReadLine();
Console.Write("请输入学生成绩:");
try
{
stu_score = Int32.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("score input errors");
continue;
}

if (stu_score < 0 || stu_score > 100)
{
Console.WriteLine("score overflow");
continue;
}
Stu_Node stu_Node = new Stu_Node(stu_ID, stu_name, stu_score);
stu_list.InsertNode_End(stu_Node);
Console.WriteLine("是否继续输入?(Y/N)");
ch = char.Parse(Console.ReadLine());
if (ch == 'n' || ch == 'N')
{
break;
}
}
break;
case 2:
while (true)
{
string stu_ID, stu_name;
int stu_score;
char ch;
int k;
Console.Write("请问在第多少个学生前插入数据?请输入:");
try
{
k = Int32.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("error,Please enter an integer");
continue;
}

if (k < 1 || k > stu_list.GetLength())
{
Console.WriteLine("the number must between 1 and {0}", stu_list.GetLength());
continue;
}
Console.Write("请输入学生学号:");
stu_ID = Console.ReadLine();
Console.Write("请输入学生姓名:");
stu_name = Console.ReadLine();
Console.Write("请输入学生成绩:");
try
{
stu_score = Int32.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("score input errors");
continue;
}

if (stu_score < 0 || stu_score > 100)
{
Console.WriteLine("score overflow");
continue;
}
Stu_Node stu_Node = new Stu_Node(stu_ID, stu_name, stu_score);
stu_list.InsertNode(stu_Node, k);
Console.WriteLine("是否继续插入?(Y/N)");
ch = char.Parse(Console.ReadLine());
if (ch == 'n' || ch == 'N')
{
break;
}
}
break;
}
Console.WriteLine("是否继续进行操作?(Y/N)");
Y_N = char.Parse(Console.ReadLine());
if (Y_N == 'n' || Y_N == 'N')
{
break;
}
}
}
}
}
}

红色子图部分为报错部分,两个地方的错误相同,错误提示如下,绿色字体可以直接忽略
-----------------------------------------------------------------------------------------------------------------------------------------
错误 1 与“xxx.ILinarList<xxx.SNode<xxx.Stu_Node>>.InsertNode_End(xxx.SNode<xxx.Stu_Node>)”最匹配的重载方法具有一些无效参数
错误 2 参数 1: 无法从“xxx.Stu_Node”转换为“xxx.SNode<xxx.Stu_Node>”
-----------------------------------------------------------------------------------------------------------------------------------------

求解...
...全文
204 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng2005 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

本人感觉 : C#对数据结构的描绘 感觉不如C++来的直白..不知道大家是不是也这样觉得
C#的好处就是有现成的写好的数据结构的类,拿来用就是了...
[/Quote]
什么叫直白的描述?
try_cry 2012-09-29
  • 打赏
  • 举报
回复
问题已解决,谢谢围观。错误在于我用了两次泛型定义,[ILinarList<SNode<Stu_Node>> stu_list = null;]这里我将SNode<Stu_Node>定义成泛型T了,而[stu_list.InsertNode_End(stu_Node);]这里我又将stu_Node定义成泛型T了,所以会出现那种错误提示。只需要将[ILinarList<SNode<Stu_Node>> stu_list = null;]改成[ILinarList<Stu_Node> stu_list = null;]就行了。
  • 打赏
  • 举报
回复
什么是直白的描述呢?
try_cry 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

本人感觉 : C#对数据结构的描绘 感觉不如C++来的直白..不知道大家是不是也这样觉得
C#的好处就是有现成的写好的数据结构的类,拿来用就是了...
[/Quote]
我新手,还不了解耶...
try_cry 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

嘿嘿,又是你。我已经在那里回复你了,去看吧。。。
[/Quote]
(*^__^*) 疑问还没有结束呢,回去在看看哈
zhanglong19891129 2012-09-27
  • 打赏
  • 举报
回复
本人感觉 : C#对数据结构的描绘 感觉不如C++来的直白..不知道大家是不是也这样觉得
C#的好处就是有现成的写好的数据结构的类,拿来用就是了...
ZWYyj 2012-09-27
  • 打赏
  • 举报
回复
嘿嘿,又是你。我已经在那里回复你了,去看吧。。。
try_cry 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的错误提示信息中已经写明了呀

错误 2 参数 1: 无法从“xxx.Stu_Node”转换为“xxx.SNode<xxx.Stu_Node>”

看看你的public void InsertNode_End(T a)的实现
参数是T,
而不是T1<T2>
[/Quote]
按照这个错误提示,好像跟你说的恰恰相反,错误提示是:无法从“xxx.Stu_Node”转换为“xxx.SNode<xxx.Stu_Node>”,我传过去的类型确实是xxx.Stu_Node,但是为什么泛型T只接受xxx.SNode<xxx.Stu_Node>类型,而不能接受xxx.Stu_Node类型?
victo7 2012-09-27
  • 打赏
  • 举报
回复
你的错误提示信息中已经写明了呀

错误 2 参数 1: 无法从“xxx.Stu_Node”转换为“xxx.SNode<xxx.Stu_Node>”

看看你的public void InsertNode_End(T a)的实现
参数是T,
而不是T1<T2>
try_cry 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

xxx.ILinarList<xxx.SNode<xxx.Stu_Node>>.InsertNode_End(xxx.SNode<xxx.Stu_Node>)
看着蛋疼。。。。
[/Quote]
好吧,xxx可以直接忽略,那个只是命名空间
ILinarList<SNode<Stu_Node>>.InsertNode_End(SNode<Stu_Node>)
这样看着,蛋疼的应该好点...
victo7 2012-09-27
  • 打赏
  • 举报
回复
xxx.ILinarList<xxx.SNode<xxx.Stu_Node>>.InsertNode_End(xxx.SNode<xxx.Stu_Node>)
看着蛋疼。。。。

110,650

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧