好的,我正在尝试在这本书上做这个编程项目。这就是它所说的:
循环列表是一个链接列表,其中最后一个链接指向第一个链接。 有很多方法可以设计循环列表。有时会有指针指向 列表的“开始”。但是,这使得列表不像真正的圆圈那样 更像是一个结尾的普通列表。做一个 单个链接循环列表的类,没有结束也没有开头。该 只能访问列表是一个单一的引用,当前,可以指向任何链接 在名单上。此引用可以根据需要在列表中移动。 (看到 编程项目5.5适用于理想情况下这样的循环列表的情况 适合。)您的列表应该处理插入,搜索和删除。你可以 如果这些操作发生在下游的一个链接,那么发现它很方便 当前指向的链接。 (因为上游链接是单链接的,你 如果不绕着圆圈走,就无法得到它。)你也应该如此 能够显示列表(虽然你需要在某些任意的情况下打破圆圈 指向在屏幕上打印它)。移动当前的step()方法 一直到下一个链接也可能派上用场。
这是我到目前为止,我的主要方法无法改变。
class circularL
{
int data;
circularL next;
circularL prev;
public circularL(int d)
{
data = d;
next = null;
prev = null;
}
public int getData()
{
return data;
}
}
class circularLL
{
circularL currPt;
//constructor
public circularLL()
{
currPt = null;
}
/******************************************
* insertLink() function performs *
* inserting a new link with the data item*
* to the existing list. *
*****************************************/
public void insertLink(int dd)
{
circularL theLink = new circularL(dd);
if(currPt==null)
{
theLink.next = theLink;
theLink.prev = theLink;
}
else if(currPt.next==null&&currPt.prev==null&& currPt!=null)
{
theLink.next = currPt;
theLink.prev = currPt;
currPt.prev = theLink;
currPt.next = theLink;
}
else if(currPt != null)
{
theLink.next = currPt.next;
theLink.prev = currPt;
currPt.next.prev = theLink;
currPt.next = theLink;
}
currPt = theLink;
}
/**************************************************
* The search() function search for the particular*
* key by traversing through the linked list. *
*************************************************/
public int find(int key)
{
circularL tempCurr= currPt;
if(tempCurr.data == key)
{
return key;
}
else
{
tempCurr = tempCurr.next;
}
while(tempCurr.data!=currPt.data)
{
if(tempCurr.data==key)
{
return key;
}
else
{
tempCurr = tempCurr.next;
}
}
System.out.println("Key not found!");
return -99;
}
/******************************************
* The delete() function delete the linked*
* list at the current pointer and return *
* the value of the data item. *
*****************************************/
public int delete()
{
circularL tempCurr = currPt;
currPt.next.prev = currPt.prev;
currPt.prev.next = currPt.next;
currPt = tempCurr.prev;
return tempCurr.data;
}
/********************************************
* The printRing() function prints out the *
* linked list by traversing the linked list*
* in either direction. *
*******************************************/
public void displayList(boolean direction)
{
circularL tempLink = currPt;
do
{
System.out.print(tempLink.getData() +" ");
tempLink=direction?tempLink.next:tempLink.prev;
}
while(tempLink.data!=currPt.data);
System.out.println("");
}
}
class CircApp
{
public static void main(String[] args)
{
Link f, d;
circularLL theList = new circularLL(); // make list
theList.insertLink(10); // insert items
theList.insertLink(20);
theList.insertLink(30);
theList.insertLink(40);
theList.insertLink(50);
theList.insertLink(60);
theList.insertLink(70);
theList.displayList(); // display list
f = theList.find(30); // find item
if( f != null)
System.out.println("Found link with key " + f.iData);
else
System.out.println("Can't find link with key 30");
theList.displayList(); // display list
System.out.println("Inserting link with key 80");
theList.insertLink(80);
theList.displayList(); // display list
d = theList.delete(60); // delete item
if( d != null )
System.out.println("Deleted link with key " + d.iData);
else
System.out.println("Can't delete link with key 60");
theList.displayList(); // display list
f = theList.find(99); // find item
if( f != null)
System.out.println("Found link with key " + f.iData);
else
System.out.println("Can't find link with key 99" );
theList.displayList(); // display list
d = theList.delete(13); // delete item
if( d != null )
System.out.println("Deleted link with key " + d.iData);
else
System.out.println("Can't delete link with key 13");
theList.displayList(); // display list
System.out.println("Stepping through list");
for(int j=0; j<theList.getSize(); j++)
{
theList.step();
theList.displayList();
}
System.out.println("Will delete and step one by one");
while(theList.isEmpty() == false)
{
theList.delete();
theList.step();
theList.displayList();
}
} // end main()
}
答案 0 :(得分:0)
以下是错误:
1
CircApp.java:134: error: cannot find symbol
Link f, d;
原因:您没有尝试引用Link
类。
解决:创建一个Link
类,或类似行为的东西。
在第145,152,156,160,173,177,183,191行:您正在使用方法displayList
,即not defined
在第152,172行:您正在使用方法delete
,即not defined
在第182,190行:您正在使用方法step
,即not defined
在第180行:您使用的是方法getSize
,即not defined
在第187行:您使用的是方法isEmpty
,not defined
解决:定义这些方法
如果要在定义这些方法之前运行代码,请至少为它们创建一个空定义或注释这些行。
PS:不要在SO上发布代码来解决编译错误。这显然意味着你不想学习。