我试图实现一个循环链表,但它没有像我预期的那样工作.即使我插入两个元素insertAfter,printList只打印一个节点.这是一个最小的例子:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct dnode_elm {
int item;
struct dnode_elm *next, *prev;
};
struct dnode_elm *
insertAfter(struct dnode_elm *a, int value) {
struct dnode_elm *v= malloc(sizeof(struct dnode_elm));
v->item=value;
a->next=v;
v->prev=a;
v->next=a->next;
a->next->prev=v;
return v;
}
void
printList(struct dnode_elm *h) {
while (h != h->next) {
h = h->next;
printf("%d --> ",h->item);
}
}
int
main(void) {
struct dnode_elm h = { INT_MAX, &h, &h };
insertAfter(&h, 1);
insertAfter(&h, 2);
printList(&h);
}
Run Code Online (Sandbox Code Playgroud) 在Linux中运行sbcl 1.3.7,我有一个对象有一个有意为循环列表的插槽,遵循Rainer Joswig 在Common Lisp中的循环列表中的建议和一个旨在成为正确列表的全局变量(不打算是圆).
(setf *print-circle* t)
(defun circular (items)
(setf (cdr (last items)) items)
items)
(defclass circular ()
((items :accessor items :initarg :items)))
(defmethod initialize-instance :after ((c circular) &rest initargs)
(setf (slot-value c 'items)
(circular (slot-value c 'items))))
(defmethod next-item ((c circular))
(prog1 (first (slot-value c 'items))
(setf (slot-value c 'items)
(rest (slot-value c 'items)))))
(defparameter *notes* (make-instance 'circular :items '(A A# B C C# D D# E F F# G G#)))
(defparameter *stuff1* '(A …Run Code Online (Sandbox Code Playgroud) 我正在通过继承创建一个异构的循环链表。作为动态分配的数据类型,我需要某种形式的解除分配,所以我最初想到了Ada.Unchecked_Deallocation. 不幸的是,我的访问类型的工作方式是因为根元素被标记,并且因为我希望能够使用相同的指针类型来访问层次结构的任何对象,以下代码片段将无法编译。
type Element is tagged private;
type ElementPtr is access all Element'Class;
-- fully define Element
procedure Free is new Ada.Unchecked_Deallocation(Element, ElementPtr);
Run Code Online (Sandbox Code Playgroud)
有没有人对我可以用来释放 ElementPtr 指向的任何继承 Element 类型的对象使用的内存的替代释放形式有任何建议?谢谢!
我正在使用java中的循环列表.我正在尝试打印列表中的数据,但我没有得到所需的输出.我得到的输出为
CircularList @ 55f96302
CircularList @ 3d4eac69
CircularList @ 42a57993
请帮助解决这个问题.
谢谢!!
import java.util.Iterator;
public class CircularList<T> implements Iterable<T> {
private static class myIterator<T> implements Iterator<T> {
int i = 0;
CircularList<T> myList;
Entry<T> iter;
public myIterator(CircularList<T> list) {
iter = list.head;
myList = list;
}
public boolean hasNext() {
return !(myList.size() == i)
}
public T next() {
//System.out.println("next");
i++;
T nextvalue = iter.value;
//Entry<T> nextnode = new Entry<T>();
iter = iter.next;
return nextvalue;
}
public void remove() { …Run Code Online (Sandbox Code Playgroud) 我是Python的新手,我需要一个循环列表.我有一个5个标签的列表:
taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
Run Code Online (Sandbox Code Playgroud)
我有另一个单调增加值的列表:
list = [1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)
我想用taglist长度来创建另一个列表list.如果list有7个项目,我想要一个新的标签列表,如下所示.
newtaglist = ["faint", "shocking", "frosty", "loved", "sadness","faint", "shocking"]
Run Code Online (Sandbox Code Playgroud)
这个列表将继续像圆形填充一样.我怎样才能做到这一点?
已解决:谢谢所有在这篇文章中回答的人.现在我很困惑地选择了答案.:(每个人看起来都很好.虽然我使用的是更简单的一个.
我们已经从lisp获得了作业,我需要使用"循环"列表(我不知道这是什么命名).通过"循环"列表,我的意思是列表,cdr最后一个cons的哪一个指向同一列表中的第一个.
(Value1 . PointerValue2) (Value2 . PointerValue3) (Value3 . PointerValue1)
Run Code Online (Sandbox Code Playgroud)
我们被教导要创建这样的列表:
(defun cykl (l)
(setf (cdr (last l)) l)
)
Run Code Online (Sandbox Code Playgroud)
我使用的Lisp软件(Lispbox)不支持这种列表.我也在Debian上尝试了clisp,但是在创建了这样的列表后它已经崩溃了.
你知道哪些lisp实现支持这个(免费软件,os独立)?