表的應(yīng)用——排序與描述多項式

排序

樸素排序

在鏈表建立的過程中可以直接完成排序功能幕袱,即建立一個新鏈表并將源數(shù)據(jù)一個一個存進新鏈表中趾徽,每個元素存儲的位置在小于這個元素的節(jié)點和大于這個元素的節(jié)點之間

排序部分

func (s *sort_table) append(data int) {
    node := s.head
    for (node.next != nil) && (node.next.data.data <= data) {
        node = node.next
    }
    new_data := table_data{data}
    new_node := &table_node{new_data, node.next}
    node.next = new_node
    s.length++
}

判斷要插入的值是否剛比下一個值小敛摘,若小則插入這一個節(jié)點與下一個節(jié)點之間牢硅。若無比要插入值大的節(jié)點則將待插入值插入鏈表的最后

遍歷部分

func (s *sort_table) return_result() []int {
    result := []int{}
    node := s.head.next
    for node != nil {
        result = append(result, node.data.data)
        node = node.next
    }
    return result
}

從頭開始順序遍歷瓢宦,直到所有值被取出

基數(shù)排序

這是一種類似于桶排序的排序方法造烁,以基10排序為例明场,首先建立10個桶汽摹,分別是0~9,按十進制數(shù)的最低位送進對應(yīng)的桶中苦锨,再按桶順序取出逼泣,依次再按次低位送進桶中,重復(fù)到最高位舟舒,再依次取出則得到排序結(jié)果(順序均是從0桶到9桶拉庶,同一個桶先進先出)

桶ADT

type card_sort struct {
    link_table
}

func (c *card_sort) pop() int {
    if c.head.next == nil {
        return -1
    } else {
        data := c.head.next.data.data
        c.head.next = c.head.next.next
        return data
    }
}

“繼承”鏈表的方法,添加從頭取出節(jié)點的方法pop()

初始化桶函數(shù)

func initial_bucket() [10]*card_sort {
    bucket := [10]*card_sort{}
    new_data := link_table{table_node{table_data{}, nil}, 0}
    for i := 0; i < len(bucket); i++ {
        bucket[i] = &card_sort{new_data}
    }
    return bucket
}

初始化一個尺寸為10的桶數(shù)組

獲得基數(shù)函數(shù)

func get_num(num int, data int) int {
    return int(float64(data)/math.Pow(10, float64(num))) % 10
}

獲取傳入?yún)?shù)data的第num(從0開始計數(shù))位數(shù)

入桶函數(shù)

func in_bucket(data []int, num int) [10]*card_sort {
    bucket := initial_bucket()
    for i := range data {
        bucket[get_num(num, data[i])].append(table_data{data[i]})
    }
    return bucket
}

按順序將切片帶入的數(shù)據(jù)根據(jù)獲得的基數(shù)送入對應(yīng)的桶中

出桶函數(shù)

func out_bucket(bucket [10]*card_sort) []int {
    temp := 0
    data := []int{}
    for i := range bucket {
        temp = bucket[i].pop()
        for temp != -1 {
            data = append(data, temp)
            temp = bucket[i].pop()
        }
    }
    // fmt.Println(data)
    return data
}

從桶0開始依次將桶中的數(shù)據(jù)取出放入一個切片中

一次桶排序函數(shù)

func card_sort_step(bucket [10]*card_sort, num int) [10]*card_sort {
    data := out_bucket(bucket)
    return in_bucket(data, num)
}

先出桶秃励,后按給定的位數(shù)num入桶

桶排序函數(shù)

func card_sort_eval(data []int, num int) []int {
    bucket := in_bucket(data, 0)
    for i := 1; i < num; i++ {
        bucket = card_sort_step(bucket, i)
    }
    return out_bucket(bucket)
}

多項式ADT

使用表的方式可以描數(shù)單元的多項式(如果使用鏈表氏仗,則數(shù)據(jù)部分就是{系數(shù),冪次數(shù)})

多項式鏈表結(jié)構(gòu)體

type Table_data struct {
    coefficient int
    index       int
}

type table_node struct {
    data Table_data
    next *table_node
}

type Mult struct {
    head   *table_node
    length int
}

多項式插入方法

func (s *Mult) Append(data Table_data) {
    node := s.head
    for (node.next != nil) && (node.next.data.index <= data.index) {
        node = node.next
    }
    if node.data.index == data.index {
        node.data.coefficient += data.coefficient
    } else {
        new_node := &table_node{data, node.next}
        node.next = new_node
        s.length++
    }
}

尋找到恰好大于待插入值的節(jié)點夺鲜,for循環(huán)結(jié)束后皆尔,結(jié)果可能有兩種:

  • 待插入值等于現(xiàn)節(jié)點,直接合并
  • 待插入值不等于現(xiàn)節(jié)點币励,插入新節(jié)點

結(jié)果顯示方法

func (s *Mult) Return_result() []Table_data {
    result := []Table_data{}
    node := s.head.next
    for node != nil {
        result = append(result, node.data)
        node = node.next
    }
    return result
}

遍歷多項式慷蠕,打印系數(shù)與冪次

多項式相加

func (self *Mult) Add_(adder *Mult) {
    adder_node := adder.head.next
    for adder_node != nil {
        self.Append(adder_node.data)
        adder_node = adder_node.next
    }
}

將一個多項式的全部取出并插入另一個多項式即完成多項式相加

多項式相乘

func (self *Mult) Dot(mul *Mult) *Mult {
    mul_node, node := mul.head.next, self.head.next
    new_index, new_co := 0, 0
    new_table := New_mult()
    for node != nil {
        mul_node = mul.head.next
        for mul_node != nil {
            new_index = mul_node.data.index + node.data.index
            new_co = mul_node.data.coefficient * node.data.coefficient
            new_table.Append(Table_data{new_co, new_index})
            mul_node = mul_node.next
        }
        node = node.next
    }
    return new_table
}

將兩個多項式的節(jié)點取出兩兩相乘(冪指數(shù)相加,系數(shù)相乘)食呻,將結(jié)果插入一個新多項式中完成多項式相加

GO語言筆記

同package多文件

當(dāng)一個package由多個文件描述時流炕,應(yīng)當(dāng)將所有文件放在同一目錄下,運行時包括所有.go文件

自定義包

將包放在一個文件夾中仅胞,文件夾名與package名相同每辟,調(diào)用時路徑寫到文件夾即可。另外包中的需要在包外被調(diào)用的函數(shù)/變量/常量/結(jié)構(gòu)體等首字母要大寫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末干旧,一起剝皮案震驚了整個濱河市渠欺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莱革,老刑警劉巖峻堰,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讹开,死亡現(xiàn)場離奇詭異,居然都是意外死亡捐名,警方通過查閱死者的電腦和手機旦万,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镶蹋,“玉大人成艘,你說我怎么就攤上這事『毓椋” “怎么了淆两?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拂酣。 經(jīng)常有香客問我秋冰,道長,這世上最難降的妖魔是什么婶熬? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任剑勾,我火速辦了婚禮赵颅,結(jié)果婚禮上虽另,老公的妹妹穿的比我還像新娘。我一直安慰自己饺谬,他們只是感情好捂刺,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著募寨,像睡著了一般族展。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绪商,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天苛谷,我揣著相機與錄音,去河邊找鬼格郁。 笑死,一個胖子當(dāng)著我的面吹牛独悴,可吹牛的內(nèi)容都是我干的例书。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刻炒,長吁一口氣:“原來是場噩夢啊……” “哼决采!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坟奥,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤树瞭,失蹤者是張志新(化名)和其女友劉穎拇厢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晒喷,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡孝偎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凉敲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衣盾。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爷抓,靈堂內(nèi)的尸體忽然破棺而出势决,到底是詐尸還是另有隱情,我是刑警寧澤蓝撇,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布果复,位于F島的核電站,受9級特大地震影響渤昌,放射性物質(zhì)發(fā)生泄漏虽抄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一耘沼、第九天 我趴在偏房一處隱蔽的房頂上張望极颓。 院中可真熱鬧,春花似錦群嗤、人聲如沸菠隆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骇径。三九已至,卻和暖如春者春,著一層夾襖步出監(jiān)牢的瞬間破衔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工钱烟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晰筛,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓拴袭,卻偏偏與公主長得像读第,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拥刻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1 序 2016年6月25日夜怜瞒,帝都,天下著大雨般哼,拖著行李箱和同學(xué)在校門口照了最后一張合照吴汪,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,108評論 0 12
  • 一漾橙、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,268評論 0 16
  • 表格的學(xué)習(xí) 表格 table thead 表頭 (可以忽略) tr 行 th 列 tbody 表體...
    Cyril丶閱讀 179評論 0 0
  • 我一直自詡是個沒文化的人近刘,不看書不讀報擒贸,算“文盲”,雖然我其實是個工科博士觉渴。但從小對詩詞歌賦就不太感興趣介劫,讓我一直...
    淼博士閱讀 276評論 0 0
  • 在開發(fā)需求需要兼容IE8-IE10時,為了使盒模型計算更加方便大多都選擇使用了box-sizing 在沒有使用bo...
    niccky閱讀 1,321評論 0 1