数据结构之数组go言语实现

package main

import (
	"fmt"
)

type Arr struct {
	Cnt int
	Len int
        Pbase *[]int
}

func init_arr(arr *Arr,len int)  {
	if len<1{
		panic("长度不能小于1")
	}
	var arr_int=make([]int,len)
        arr.Pbase=&arr_int
        arr.Cnt=0
	arr.Len=len
}
func is_full(arr *Arr) bool {
        if arr.Len==arr.Cnt {
		return true
	}
	return false
}
func is_empty(arr *Arr) bool {
        if arr.Cnt==0 {
		return true
	}
	return false
}
func append_arr(arr *Arr,val int) bool {
	if(is_full(arr)){
		return false
	}
	(*arr.Pbase)[arr.Cnt]=val
	arr.Cnt++
	return true
}

func insert_arr(arr *Arr,pos,val int) bool {
        if is_full(arr) || pos>arr.Cnt-1 || pos<0 {
		return false
	}
	i,j:=pos,arr.Cnt-1
	for ;i<=j;j--{
		(*arr.Pbase)[j+1]=(*arr.Pbase)[j]
	}
	(*arr.Pbase)[pos]=val
	arr.Cnt++
	return true
}

func delete_arr(arr *Arr,pos int)(bool,int){
	if is_empty(arr) || pos>arr.Cnt-1 || pos<0{
		return false,0
	}
	i,j:=pos,arr.Cnt-1
	re:=(*arr.Pbase)[pos]
	for ;i<j;i++ {
		(*arr.Pbase)[i]=(*arr.Pbase)[i+1]
	}
	(*arr.Pbase)[j]=0
	arr.Cnt--
	return true,re
}

func get(arr *Arr,pos int)int {
        if is_empty(arr) || pos>arr.Cnt-1 || pos<0 {
		return 0
	}
	return (*arr.Pbase)[pos]
}

func sort_arr(arr *Arr) bool {
        if is_empty(arr) || arr.Cnt==1 {
		return false
	}
	//var tmp int
	for i:=0;i<arr.Cnt;i++{
		for j:=i;j<arr.Cnt;j++{
			if (*arr.Pbase)[j]<(*arr.Pbase)[i] {
				tmp:=(*arr.Pbase)[i]
				(*arr.Pbase)[i] = (*arr.Pbase)[j]
				(*arr.Pbase)[j] = tmp
			}
		}
	}
	return true
}

func sort_arr2(arr *Arr) bool {
	if is_empty(arr) || arr.Cnt==1 {
		return false
	}
	for i:=arr.Cnt-1;i>0;i--{
		for j:=0;j<i;j++{
			tmp:=(*arr.Pbase)[j]
			if (*arr.Pbase)[j+1]<tmp{
				(*arr.Pbase)[j]=(*arr.Pbase)[j+1]
				(*arr.Pbase)[j+1]=tmp
			}
		}
	}
	return true
}

func show_arr(arr *Arr){
	if is_empty(arr) {
		return
	}
        for i:=0;i<arr.Cnt;i++ {
		fmt.Print((*arr.Pbase)[i]," ")
	}
	fmt.Println()
}

func inversion_arr(arr *Arr) bool{
        if is_empty(arr) || arr.Cnt==1 {
		return false
	}
	for i,j:=0,arr.Cnt-1;i<=j;i,j=i+1,j-1{

		tmp:=(*arr.Pbase)[i]
		(*arr.Pbase)[i]=(*arr.Pbase)[j]
		(*arr.Pbase)[j]=tmp
	}
	return true
}


func main() {
	var arr Arr
	init_arr(&arr,6)

	append_arr(&arr,8)
	append_arr(&arr,7)
	append_arr(&arr,6)
	append_arr(&arr,5)
	append_arr(&arr,9)
	insert_arr(&arr,2,1)
	show_arr(&arr)
	sort_arr2(&arr)
	show_arr(&arr)
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值