问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构 循环单链表

发布网友 发布时间:2022-04-26 10:18

我来回答

1个回答

热心网友 时间:2022-04-27 05:38

package e.cquptzx.List;
publicinterface List
{
publicvoid insert(int i ,Object obj) throws Exception; //插入
public Object delete(int i ) throws Exception; //删除
public Object getData(int i ) throws Exception; //获取i元素
publicint size(); //表数据总数
publicboolean isEmpty(); //是否为空

}
循环单链表实现:
package e.cquptzx.List;

publicclass LoopLinkList implements List {
Node head;
Node current;
intsize;

LoopLinkList()
{
head = current = new Node(null);
head.next = head;
size =0;
}
/**
* 定位成员函数index(int i)的实现
* 循环从头开始查找,循环的条件是:1.定位完成j==i;2.链表查找结束了.
* @param i
* @throws Exception 当参数i错误时,抛出异常.
*/
publicvoid index(int i )throws Exception
{
if(i<-1 || i >size-1)
{
thrownew Exception("i error in INDEX.");
}
if(i == -1) return;
current = head.next;
int j = 0;
while(current!=head && j<i)
{
current = current.next;
j++;
}
}
/**
* 插入节点算法:
* 1.调用index(i-1),让成员变量current指向第i-1个节点.
* 2.以obj,current.next为参数创建新的节点.
* 3.更改current指向,改为下一个节点.
* 4.表元素总数加1.
*/
publicvoid insert(int i, Object obj) throws Exception {
if(i<0 || i>size)
{
thrownew Exception ("i error in INSERT.");
}
index(i-1);
current.setNext(new Node(obj,current.next));
size++;
}

/**
* 删除节点算法:
* 1.调用index(i-1),让成员变量current指向第i-1个节点.
* 2.把第i个节点脱链:让第i-1个节点的next域等于第i个节点的next域.
* 3.数据元素总数size减1.
*/
public Object delete(int i) throws Exception {
if(size == 0)
{
thrownew Exception ("Link Blank in DELETE.");
}
if(i<0 || i>size-1)
{
thrownew Exception ("i error in DELETE.");
}
index(i-1);
Object obj = current.next.getElement();
current.setNext(current.next.next);
size--;
return obj;
}
/**
* 获取指定的元素
* 1.调用index(i),让成员变量current指向第i个节点.
* 2.返回该节点的数据域的值.
*/
@Override
public Object getData(int i) throws Exception {
// TODO Auto-generated method stub
if(i<-1 || i>size-1)
{
thrownew Exception ("i error in getData.");
}
index(i);
returncurrent.getElement();
}

@Override
publicint size() {
// TODO Auto-generated method stub
returnsize;
}

@Override
publicboolean isEmpty() {
// TODO Auto-generated method stub
returnsize ==0;
}

}
循环单链表输出测试:
package e.cquptzx.List;

publicclass LoopLinkListTest
{
publicstaticvoid main(String agrs[])
{
LoopLinkList lplklt = new LoopLinkList();
int n = 10;
try
{
for(int i = 0;i<n;i++)
{
lplklt.insert(i, new Integer(i+1));
}
lplklt.delete(4);
for(int i = 0;i<lplklt.size;i++)
{
System.out.print(lplklt.getData(i)+"...end ");
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}

输出结果:

分类: 数据结构-java标签: 循环单链表绿色通道: 好文要顶 关注我 收藏该文与我联系 淅沥枫
关注 - 6
粉丝 - 9 +加关注 1 0 (请您对文章做出评价) « 上一篇:单链表-数据结构-java实现
» 下一篇:双向链表-数据结构-java实现
posted @ 2012-10-06 17:59 淅沥枫 阅读(951) 评论(0) 编辑 收藏追问用c++实现

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...怎么插入耳机时 耳机和外放都有声音?我用驱动人生驱动过显示声卡是正... USB耳机插入听不到声音,用什么软件可以听到声音?我的耳机是赛德斯的,听... 用USB71耳机看电影和用35mm立体声耳机杜比音效看电影哪个效果好 学生和家庭情况如何填写呢? 当初老板帮我租房子,租了半年,老板说干满半年才能退,现在没有干满半年... 博湖县在哪买辣椒酱 宝宝都一岁多了,要记得做这款高钙食物,不要浪费长身体的机会 高钙零食可不可以帮助孩子长高呢? 文艺一些的纹身店名字 宝马325li是三缸吗? 急需名人创业故事,无论字是多还是少,都要。越多越好,要有标题的。 求单链表和循环链表的应用举例(不要算法) 数据结构单循环链表 数据结构:单向链表和单向循环链表的区别就是后者把尾节点的next指针又指... 单链表和循环链表操作用什么不一样? 求比较单链表,循环链表,双向链表的插入,删除算法上有什么不同 什么是链表? 单链表;双向链表;循环链表 各是怎么进行存储和操作的? 单链表、循环链表、双向链表的特点 在数据结构链表的部分,什么时候使用单链表什么时候使用循环链表。什么... 对比单链表双向链表循环链表的相同点,不同点及特点 单链表 循环链表 双向链表的相同点还有不同点? 单链表、单循环链表和双向链表 单链表和循环单链表操作上有什么区别 循环链表和单链表的区别? 数据结构中单链表、循环链表、双向链表的特点是什么 我想问生命科学在未来十年内发展前景究竟怎样? 化学发展的历史阶段 农药使用的利弊 化工行业的纵深发展方向及其深远意义和影响? 投资农业项目前景好吗 判断链表是否有循环,单链表和循环单链表,链表为空的条件分别 数据结构中循环链表是怎么实现的,对其指针的变化不理解 如何把单链表改成循环链表啊? 数据结构:线性链表、循环链表、双向链表,这三种链表哪种可以由一个节 ... 求精彩曲折的传奇创业故事? 作文题目:我家的创业故事 怎么写 手机不停地跳出清理大师和美团快手的广告怎么办? 为什么手机垃圾清理软件里广告非常多什么原因? 当把清理大师删除后,为什么手机页面上会出现许多广告oppo手机? VIVOY5S手机在解完锁总是出现一个清理大师广告怎么关闭 如何关闭清理大师弹出的视频广告 4岁男孩跟17岁女孩跳舞可以吗? 三个女孩和两个男孩跳舞,恰好跳一分钟,一共跳了几分钟 男女抱在一起,贴身,相互夹着腿的舞蹈叫什么?求科普 12岁半男孩为什么带着5岁半女孩一起跳舞? 一个男孩和一个女孩在跳舞猜一个成语 有一个男孩和一个女孩在跳舞,用英语怎么说? 经常在一起跳舞的男女会发生什么? 女孩爱跳舞,还是男孩爱跳舞 男孩就应该踢足球,女孩就应该跳舞吗?