Skip to content

Commit

Permalink
data_struct update 2021.09.11 图指针准确定位
Browse files Browse the repository at this point in the history
  • Loading branch information
Juminiy committed Sep 11, 2021
1 parent 2aea503 commit 57d4706
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 42 deletions.
21 changes: 19 additions & 2 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

84 changes: 45 additions & 39 deletions my-algo/algo_base/data_struct/complicated/Graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,28 +52,32 @@ func (graph *AdjGraph) PrintNodes(tAddress []interface{}) {
fmt.Printf("Location[%d]'s address is[%p],value is[%v]\n", i, &value, value)
}
}

func (graph *AdjGraph) BfsGraph() []interface{} {
// fmt.Println(&graph);fmt.Println("---------------------")
if graph == nil || graph.Nodes == nil || len(graph.Nodes) == 0 {
return nil
}
q, seqNodes, visNode := &simple.MyQueue{}, make([]interface{}, 0), &MySet{}
visNode.Construct()
q.Push(graph.Nodes[0])
for !q.IsEmpty() {
var curNode *GraphNode
if tNode, err := q.Front(); err == nil {
curNode = tNode.(*GraphNode)
seqNodes = append(seqNodes, curNode)
visNode.Insert(curNode)
for _, curNode := range graph.Nodes {
if !visNode.Exist(curNode) {
q.Push(curNode)
}
q.Pop()
// fmt.Println(tNode)
// adjNode := graph.Adjacent[*tNode]
// fmt.Println(adjNode)
for _, adjNode := range graph.Adjacent[*curNode] {
if !visNode.Exist(adjNode) {
q.Push(adjNode)
for !q.IsEmpty() {
if tNode, err := q.Front(); err == nil {
curNode = tNode.(*GraphNode)
seqNodes = append(seqNodes, curNode)
visNode.Insert(curNode)
}
q.Pop()
// fmt.Println(tNode)
// adjNode := graph.Adjacent[*tNode]
// fmt.Println(adjNode)
for _, adjNode := range graph.Adjacent[*curNode] {
if !visNode.Exist(adjNode) {
q.Push(adjNode)
}
}
}
}
Expand All @@ -87,38 +91,40 @@ func (graph *AdjGraph) DfsGraph() []interface{} {
}
s, seqNodes, visNodes := &simple.MyStack{}, make([]interface{}, 0), &MySet{}
visNodes.Construct()
curNode := graph.Nodes[0]
for !s.IsEmpty() || curNode != nil {
for curNode != nil {
s.Push(curNode)
seqNodes = append(seqNodes, curNode)
visNodes.Insert(curNode)
if graph.Adjacent[*curNode] != nil {
curNode = graph.Adjacent[*curNode][0]
if visNodes.Exist(curNode) {
for _, curNode := range graph.Nodes {
for !s.IsEmpty() || (curNode != nil && !visNodes.Exist(curNode)) {
for curNode != nil {
s.Push(curNode)
seqNodes = append(seqNodes, curNode)
visNodes.Insert(curNode)
if graph.Adjacent[*curNode] != nil {
curNode = graph.Adjacent[*curNode][0]
if visNodes.Exist(curNode) {
curNode = nil
}
} else {
curNode = nil
}
} else {
curNode = nil
}
}
if !s.IsEmpty() {
if tNode, err := s.Top(); err == nil {
curNode = tNode.(*GraphNode)
}
for _, tNode := range graph.Adjacent[*curNode] {
if !visNodes.Exist(tNode) {
s.Push(tNode)
curNode = tNode
break
if !s.IsEmpty() {
if tNode, err := s.Top(); err == nil {
curNode = tNode.(*GraphNode)
}
}
if err := s.Pop(); err == nil {
if visNodes.Exist(curNode) {
curNode = nil
for _, tNode := range graph.Adjacent[*curNode] {
if !visNodes.Exist(tNode) {
s.Push(tNode)
curNode = tNode
break
}
}
if err := s.Pop(); err == nil {
if visNodes.Exist(curNode) {
curNode = nil
}
}
}
}
}

return seqNodes
}
6 changes: 5 additions & 1 deletion my-algo/algo_base/data_struct/data_struct_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ func TestBfsGraph(t *testing.T) {
adj.AddNode(nodee)
edgeab, edgeac, edgead, edgebe := &complicated.GraphEdge{"1"}, &complicated.GraphEdge{"2"}, &complicated.GraphEdge{"3"}, &complicated.GraphEdge{"4"}
edgeea := &complicated.GraphEdge{5}
nodeg := &complicated.GraphNode{"G"}
adj.AddNode(nodeg)
edgega := &complicated.GraphEdge{8}
adj.AddEdge(nodeg, nodea, edgega)
adj.AddEdge(nodea, nodeb, edgeab)
adj.AddEdge(nodea, nodec, edgeac)
adj.AddEdge(nodea, noded, edgead)
Expand All @@ -83,5 +87,5 @@ func TestBfsGraph(t *testing.T) {
//fmt.Println("nodea",&nodea);fmt.Println("nodeb",&nodeb);fmt.Println("nodec",&nodec);fmt.Println("noded",&noded);fmt.Println("nodee",&nodee)
//fmt.Println(adj.Adjacent)
//fmt.Println(&adj)
adj.PrintNodes(adj.DfsGraph())
adj.PrintNodes(adj.BfsGraph())
}

0 comments on commit 57d4706

Please sign in to comment.