(go)线性表的次序存储

打印 上一主题 下一主题

主题 783|帖子 783|积分 2349

闲来无事,更新一下,线性表的次序存储,go语言版本,结果都已经测试过,下面给出各部分细节

  
  1. package main
  2. import "fmt"
  3. const MAXSIZE = 100
  4. type LNode *List
  5. type ElementType int
  6. type List struct {
  7.         Data []ElementType
  8.         Last int
  9. }
  10. type L List
复制代码
1、生成一个线性表

  1. func MakeEmpty() *List {
  2.         PtrL := &List{
  3.                 Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片
  4.                 Last: -1,
  5.         }
  6.         return PtrL
  7. }
复制代码
2、查找

  1. func Find(x ElementType, PtrL *List) int {
  2.         i := 0
  3.         for i <= PtrL.Last && PtrL.Data[i] != x {
  4.                 i++
  5.         }
  6.         if i > PtrL.Last {
  7.                 return -1
  8.         } else {
  9.                 return i + 1
  10.         }
  11. }
  12. func FindKth(K int, PtrL List) ElementType {
  13.         if K < 1 || K > PtrL.Last+1 {
  14.                 return -1
  15.         } else {
  16.                 return PtrL.Data[K+1]
  17.         }
  18. }
复制代码
3、插入

  1. func Insert(x ElementType, i int, PtrL *List) {
  2.         j := 0
  3.         if PtrL.Last == MAXSIZE-1 {
  4.                 fmt.Printf("Data Full")
  5.                 return
  6.         }
  7.         if i < 1 || i > PtrL.Last+2 {
  8.                 fmt.Printf("Position abnormal")
  9.                 return
  10.         }
  11.         for j = PtrL.Last; j >= i-1; j-- {
  12.                 PtrL.Data[j+1] = PtrL.Data[j]
  13.         }
  14.         PtrL.Data[i-1] = x
  15.         PtrL.Last++
  16.         return
  17. }
复制代码
4、求长度

  1. func Length(PtrL List) int {
  2.         return PtrL.Last
  3. }
复制代码
5、改值

  1. func Alter(x ElementType, i int, PtrL *List) {
  2.         if i < 1 || i > PtrL.Last+1 {
  3.                 fmt.Printf("No find element:%d", i)
  4.                 return
  5.         }
  6.         PtrL.Data[i] = x
  7. }
复制代码
6、删除

  1. func Delete(i int, PtrL *List) {
  2.         j := 0
  3.         if i < 1 || i > PtrL.Last+1 {
  4.                 fmt.Printf("Not Find Element,")
  5.                 return
  6.         }
  7.         for j = i; j <= PtrL.Last; j++ {
  8.                 PtrL.Data[j-1] = PtrL.Data[j]
  9.         }
  10.         PtrL.Last--
  11.         return
  12. }
复制代码
7、遍历

  1. func PrintL(PtrL *List) {
  2.         for i := 0; i <= PtrL.Last; i++ {
  3.                 fmt.Printf(" %d", PtrL.Data[i])
  4.         }
  5.         fmt.Println()
  6. }
复制代码
8、测试程序

  1. func main() {
  2.         L := MakeEmpty()
  3.         Insert(1, 1, L)
  4.         Insert(2, 2, L)
  5.         Insert(3, 3, L)
  6.         Insert(4, 4, L)
  7.         Insert(5, 5, L)
  8.         Insert(6, 6, L)
  9.         PrintL(L) //打印
  10.         Delete(2, L)
  11.         PrintL(L)
  12.         Alter(2, 2, L)
  13.         PrintL(L)
  14.         x := Find(2, L)
  15.         fmt.Println("result:", x)
  16.         FindKth(2, *L)
  17.         length := Length(*L)
  18.         fmt.Println("len:", length)
  19. }
复制代码

9、完整代码

  1. package main
  2. import "fmt"
  3. const MAXSIZE = 100
  4. type LNode *List
  5. type ElementType int
  6. type List struct {
  7.         Data []ElementType
  8.         Last int
  9. }
  10. type L List
  11. func MakeEmpty() *List {
  12.         PtrL := &List{
  13.                 Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片
  14.                 Last: -1,
  15.         }
  16.         return PtrL
  17. }
  18. func Find(x ElementType, PtrL *List) int {        i := 0        for i <= PtrL.Last && PtrL.Data[i] != x {                i++        }        if i > PtrL.Last {                return -1        } else {                return i + 1        }}
  19. func Insert(x ElementType, i int, PtrL *List) {
  20.         j := 0
  21.         if PtrL.Last == MAXSIZE-1 {
  22.                 fmt.Printf("Data Full")
  23.                 return
  24.         }
  25.         if i < 1 || i > PtrL.Last+2 {
  26.                 fmt.Printf("Position abnormal")
  27.                 return
  28.         }
  29.         for j = PtrL.Last; j >= i-1; j-- {
  30.                 PtrL.Data[j+1] = PtrL.Data[j]
  31.         }
  32.         PtrL.Data[i-1] = x
  33.         PtrL.Last++
  34.         return
  35. }
  36. func Length(PtrL List) int {
  37.         return PtrL.Last
  38. }
  39. func Alter(x ElementType, i int, PtrL *List) {
  40.         if i < 1 || i > PtrL.Last+1 {
  41.                 fmt.Printf("No find element:%d", i)
  42.                 return
  43.         }
  44.         PtrL.Data[i] = x
  45. }
  46. func FindKth(K int, PtrL List) ElementType {        if K < 1 || K > PtrL.Last+1 {                return -1        } else {                return PtrL.Data[K+1]        }}func Delete(i int, PtrL *List) {
  47.         j := 0
  48.         if i < 1 || i > PtrL.Last+1 {
  49.                 fmt.Printf("Not Find Element,")
  50.                 return
  51.         }
  52.         for j = i; j <= PtrL.Last; j++ {
  53.                 PtrL.Data[j-1] = PtrL.Data[j]
  54.         }
  55.         PtrL.Last--
  56.         return
  57. }
  58. func PrintL(PtrL *List) {
  59.         for i := 0; i <= PtrL.Last; i++ {
  60.                 fmt.Printf(" %d", PtrL.Data[i])
  61.         }
  62.         fmt.Println()
  63. }
  64. func main() {
  65.         L := MakeEmpty()
  66.         Insert(1, 1, L)
  67.         Insert(2, 2, L)
  68.         Insert(3, 3, L)
  69.         Insert(4, 4, L)
  70.         Insert(5, 5, L)
  71.         Insert(6, 6, L)
  72.         PrintL(L) //打印
  73.         Delete(2, L)
  74.         PrintL(L)
  75.         Alter(2, 2, L)
  76.         PrintL(L)
  77.         x := Find(2, L)
  78.         fmt.Println("result:", x)
  79.         FindKth(2, *L)
  80.         length := Length(*L)
  81.         fmt.Println("len:", length)
  82. }
复制代码

总结

看着c语言敲的,只是对语法进行简单了解

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表