⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linked-collection.zc

📁 实现树形结构
💻 ZC
字号:
//[of]:description
//[c]Linked collection is like a collection but it is a double linked list.
//[c]
//[c]The double linked list allow fast removal of any element (o(1)).
//[cf]
//[of]:imports
//[c]
import "base/types"
import "base/memory-allocator"
import "collection/collection"
//[cf]
//[of]:structures
//[c]
public struct linked element
	next: linked element
	prev: linked element
end	
//[c]
public struct linked collection
	first: linked element
	last: linked element
end
//[cf]
//[c]
//[of]:initialize - release
//[of]:linked collection
//[c]
public equ linked collection (return list: linked collection) = initialize (list)
//[cf]
//[of]:initialize (list)
//[c]
public func initialize (list: linked collection)
	first (list) = nil
	last (list) = nil
end
//[cf]
//[cf]
//[of]:enumerating
//[of]:each (list)
//[c]
public equ each (list: linked collection)

	def e = first (list)
	while not nil (e)
		yield (e)
		e = next (e)
	end

end
//[cf]
//[cf]
//[of]:adding - removing
//[of]:append (list, e)
//[c]Appends an element
//[c]
public func append (list: linked collection, e: linked element)

	next (e) = nil
	prev (e) = last (list)
	
	// update the head of the list
	if is nil (first (list))
		first (list) = e
	end
	
	// update successor
	def last = last (list)
	if not nil (last)
		next (last) = e
	end

	// update the tail of the list
	last (list) = e

end
//[cf]
//[of]:add (list, e)
//[c]
public equ add (list: linked collection, e: linked element) = 
	append (list, e)
//[cf]
//[of]:remove (list, e)
//[c]Removes an element
//[c]
public func remove (list: linked collection, e: linked element)

	if first (list) == e
		first (list) = next (e)
	end
	
	if last (list) == e
		last (list) = prev (e)
	end

	if not nil (prev (e))
		next (prev (e)) = next (e)
	end

	if not nil (next (e))
		prev (next (e)) = prev (e)
	end

end
//[cf]
//[cf]
//[of]:testing
//[of]:is empty (list)
//[c]
public equ is empty (list: linked collection) = is nil (first (list))
//[cf]
//[of]:not empty (list)
//[c]
public equ not empty (list: linked collection) = not nil (first (list))
//[cf]
//[cf]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -