package main
import (
"fmt"
)
type Data string
type dualNode struct {
prior *dualNode //前驱指针
data Data
next *dualNode //后继指针
}
//建立A-Z的双向循环链表
func createList()*dualNode{
phead:=new(dualNode) //头结点
phead.data="A"
phead.prior=nil
phead.next=nil
q:=phead
for i:=1;i<26;i++{
pnew:=new(dualNode)
pnew.data=(Data)(string(65+i))
pnew.prior=q
pnew.next=q.next
q.next=pnew
q=pnew
}
q.next=phead
phead.prior=q
return q //返回尾结点
}
func isempty(list *dualNode)bool {
if list.next==nil || list.next==list {
return true
}
return false
}
func traverse(list *dualNode){
if isempty(list) {
return
}
p:=list.next;
for p!=list{
fmt.Printf("%3s",p.data)
p=p.next
}
fmt.Printf("%3s\n",list.data)
}
//排列链表,其实就是把val%26作为尾指针返回
func lineUp(list **dualNode,val int){
p:=*list
if val<=0 {
for i:=val%26;i<0;i++{
p=p.prior
}
}else {
for i:=val%26;i>0;i--{
p=p.next
}
}
*list=p
}
func main() {
list:=createList()
var n int
traverse(list)
fmt.Println("请输入一个整数:")
fmt.Scanf("%d",&n)
lineUp(&list,n)
traverse(list)
}
本文介绍了一个使用Go语言实现的双向循环链表的数据结构。通过具体的代码示例展示了如何创建包含A到Z字符的双向循环链表,并提供了遍历及调整链表顺序的功能。此外还包含了简单的用户交互,使读者能够输入一个整数来调整链表的顺序。
479

被折叠的 条评论
为什么被折叠?



