package main
import (
"fmt"
"log"
"os"
)
//靜態鏈表節點
type Node struct{
data string
cursor int
}
const maxSize int=10
//初始化鏈表
func initList(size int)([]Node){
if size<3 {
log.Fatal("size參數錯誤")
return nil
}
list:=make([]Node,size)
for i:=0;i<size-2;i++ {
list[i].cursor=i+1
}
list[size-2].cursor=0
list[size-1].cursor=0
return list
}
//顯示鏈表結構
func traverse(list []Node){
for _,v:=range list {
fmt.Printf("%5d",v.cursor)
}
fmt.Println()
for _,v:=range list {
fmt.Printf("%5s",v.data)
}
fmt.Println()
for i,_:=range list {
fmt.Printf("%5d",i)
}
fmt.Println()
}
//回收鏈表到備用鏈表
func destroyList(list []Node){
if list[maxSize-1].cursor==0 {
return
}
j:=list[maxSize-1].cursor
list[maxSize-1].cursor=0
i:=list[0].cursor
list[0].cursor=j
if j>0 {
j=list[j].cursor
}
list[j].cursor=i
}
//判斷是否爲空
func isempty(list []Node) bool {
if list[maxSize-1].cursor==0 {
return true
}
return false
}
//鏈表長度
func length(list []Node) int {
i,j:=0,list[maxSize-1].cursor
for j>0 {
j=list[j].cursor
i++
}
return i
}
//獲取指定位置的節點數據
func getElement(list []Node,index int)string {
if index<1 || index>maxSize-2 {
log.Fatal("index out of range")
return ""
}
i:=list[maxSize-1].cursor
j:=1
for i>0 && j<index {
j++
i=list[i].cursor
}
if j!=index {
return ""
}
return list[i].data
}
//獲取數據元素的位置
func locateElem(list []Node,data string) int {
locate:=0
i:=list[maxSize-1].cursor
for i>0 {
locate++
if list[i].data==data {
return locate
}
i=list[i].cursor
}
return locate
}
//獲取元素的前驅節點
func priorElem(list []Node,data string) string {
if isempty(list){
return ""
}
i:=list[maxSize-1].cursor
var j int
for i>0 {
j=list[i].cursor
if list[j].data==data{
return list[i].data
}
i=j
}
return ""
}
//獲取元素的後驅節點
func nextElem(list []Node,data string) string {
if isempty(list) {
return ""
}
i:=list[maxSize-1].cursor
var j int
for i>0 {
j=list[i].cursor
if list[i].data==data {
return list[j].data
}
i=j
}
return ""
}
//分配節點
func malloc(list []Node) int {
i:=list[0].cursor
if i==0 {
os.Exit(0)
}
list[0].cursor=list[i].cursor
return i
}
//回收節點
func free(list []Node,index int){
list[index].cursor=list[0].cursor
list[0].cursor=index
}
//插入節點
func insertLIst(list []Node,index int,data string) {
if index<1 || index>length(list) {
os.Exit(0)
}
i:=list[maxSize-1].cursor
j:=1
for i>0 && j<index-1 {
j++
i=list[i].cursor
}
tmp:=list[i].cursor
cur:=malloc(list)
list[cur].data=data
list[cur].cursor=tmp
list[i].cursor=cur
}
//刪除節點
func deleteList(list []Node,index int)string{
if index<1 || index>length(list) {
return "刪除參數錯誤"
}
i:=list[maxSize-1].cursor
j:=1
for i>0 && j<index-1 {
j++
i=list[i].cursor
}
tmp:=list[i].cursor
list[i].cursor=list[tmp].cursor
val:=list[tmp].data
free(list,tmp)
return val
}
//遍歷鏈表
func traveList(list []Node){
if list[maxSize-1].cursor==0 {
return
}
i:=list[maxSize-1].cursor
j:=1
for i>0 {
fmt.Printf("第%d個節點爲:%s\n",j,list[i].data)
i=list[i].cursor
j++
}
}
func main() {
var list []Node
list=initList(maxSize)
list[1].data="A"
list[9].cursor=1
list[2].data="C"
list[2].cursor=0
list[0].cursor=3
//traverse(list)
insertLIst(list,2,"B")
traveList(list)
reval:=deleteList(list,1)
fmt.Println("刪除的節點爲:",reval)
traveList(list)
}
靜態鏈表GO語言實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.