数据结构(C#)--单链表

本文介绍使用C#实现链表的基本操作,包括查找、插入和删除等,并分享了实际编程过程中遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007年最后一个月在忙碌度过了,最近在网上下了一本C#版本的数据结构的电子书,正好我也打算在把数据结构在过一遍,刚好可以看这本,还可以提高一下英文的阅读能力。

书名是《DATA STRUCTURES AND ALGORITHMS USING C#》,作者:MICHAEL MCMILLAN

以后我会陆续把这本数的心得发上来,同时也把自己亲手实践过的代码发上来,大家一起学习,一起进步。如果有什么错误,大家可以发邮件或者留言给我。谢谢。由于该书的结构和我们一般教材的结构不是很一样,所以我按照一般教材的顺序,先从链表开始,原书链表是在第十一章才讲的。书中代码有问题的地方我会在注释中标注出来。

namespaceDataStruct
...{
//定义单链表的表头
publicclassNode
...{
//存储数据,定义为基类,可以存不同类型的数据
publicObjectElement;
//指向下一个结点的引用
publicNodeLink;

//构造空结点
publicNode()
...{
this.Element=null;
this.Link=null;
}

//带参数的构造器
publicNode(Objectelement)
...{
this.Element=element;
this.Link=null;
}

}


publicclassLinkedList
...{
//此处原书有误,不应该设置为peotected,这样会导致结点没有实例化
publicNodeHeader;
publicLinkedList()
...{
Header
=newNode("header");
}


//查找链表中的元素
privateNodeFind(Objectitem)
...{
NodeCurrent
=newNode();
Current
=Header;
//书中此处代码有误
//while(Current.header!=item)
while(Current.Element!=item)
...{
Current
=Current.Link;
}

returnCurrent;
}


//在链表中插入元素
publicvoidInsertNode(ObjectnewItem,Objectafter)
...{
NodeCurrent
=newNode();
NodeNewNode
=newNode(newItem);
Current
=Find(after);
if(Current!=null)
...{
NewNode.Link
=Current.Link;
Current.Link
=NewNode;
}

}



publicNodeFindPrevious(Objectn)
...{
NodeCurrent
=Header;
while(!(Current.Link==null)&&(Current.Link.Element!=n))
...{
Current
=Current.Link;
}

returnCurrent;
}


//删除结点
publicvoidRemove(Objectitem)
...{
NodeP
=FindPrevious(item);
if(!(P.Link==null))
...{
P.Link
=P.Link.Link;
}

}


//打印链表
publicvoidPrintList()
...{
NodeCurrent
=newNode();
Current
=this.Header;
while(Current.Link!=null)
...{
Console.WriteLine(Current.Link.Element);
Current
=Current.Link;
}

}


}


classProgram
...{
staticvoidMain(string[]args)
...{
//实例化结点
NodeFirstNode=newNode("Tommy");
NodeSecondNode
=newNode("weiwei");
Int32Num
=5;
//因为我们定义结点的时候是用object类型,所以结点可以存储不同类型
NodeThirdNode=newNode(Num);
FirstNode.Link
=SecondNode;
SecondNode.Link
=ThirdNode;
ThirdNode.Link
=null;
LinkedListMyList
=newLinkedList();
//将头结点指向第一个结点
MyList.Header.Link=FirstNode;
//插入结点
MyList.InsertNode("advantech","weiwei");
MyList.InsertNode(
"插入链表","Tommy");
//打印链表中的结点元素
MyList.PrintList();
Console.ReadLine();
}

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值