網(wǎng)站首頁 編程語言 正文
抽象數(shù)據(jù)結(jié)構(gòu)
抽象數(shù)據(jù)結(jié)構(gòu)(ADT)是一些操作的集合,集合了一些必要且重用性高的操作,這些操作在一個項目中只被編寫一次。抽象數(shù)據(jù)結(jié)構(gòu)只定義操作的存在,并不定義操作的實現(xiàn)
表
概念
表是一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),是一系列邏輯上"順序"的數(shù)據(jù)(順序指具有連續(xù)的數(shù)值索引)。例如$A_{0},A_{1},A_{2}$就是一個表,數(shù)據(jù)具有連續(xù)索引1,2,3。此外,還有前驅(qū)元和后繼元的概念:
- 前驅(qū)元:某個元素之前的元素被稱為該元素的前驅(qū)元(不定義第一個元素的前驅(qū)元)
- 后繼元:某個元素之后的元素被稱為該元素的后繼元(不定義最后一個元素的后繼元)
表的實現(xiàn)方法
- 數(shù)組實現(xiàn):查找快,插入與刪除慢,大小固定,內(nèi)存中一般連續(xù)
- 鏈表實現(xiàn):查找較慢,插入與刪除相對較快,大小可變,內(nèi)存中一般不連續(xù)
表需要的方法
- is_empty:判斷是否為空表
- is_last:判斷是否為結(jié)尾
- find:根據(jù)值獲得在表中的節(jié)點(find_previous:獲得前驅(qū)元)
- visit:根據(jù)位置獲得值(find)
- delete:刪除元素
- insert:插入元素
實現(xiàn)
接口與結(jié)構(gòu)體
//表中數(shù)據(jù)類型
type table_data struct {
data int
}
//鏈表節(jié)點類型
type table_node struct {
data table_data
next *table_node
}
//方法接口
type table_adt interface {
is_empty() bool
is_last(node table_node) bool
size() int
find(data table_data) *table_node
find_previous(data table_data) *table_node
find_last() *table_node
visit(num int) *table_node
delete(data table_data)
insert(data table_data, previous *table_node)
append(data table_data)
}
//鏈表結(jié)構(gòu)體
type link_table struct {
head table_node
length int
}
復(fù)制
方法的實現(xiàn)
func (table *link_table) is_empty() bool {
return table.head.next == nil
}
func (table *link_table) is_last(node table_node) bool {
return node.next == nil
}
func (table *link_table) find(data table_data) *table_node {
node := table.head.next
for (node != nil) && (node.data != data) {
// fmt.Println(node.data, data, (node.data != data))
node = node.next
}
return node
}
func (table *link_table) find_previous(data table_data) *table_node {
node := &table.head
for (node.next.data != data) && (node.next != nil) {
node = node.next
}
return node
}
func (table *link_table) find_last() *table_node {
node := &table.head
for node.next != nil {
node = node.next
}
return node
}
func (table *link_table) visit(num int) *table_node {
node := table.head.next
for i := 0; i < num; i++ {
node = node.next
}
return node
}
func (table *link_table) delete(data table_data) {
previous := table.find_previous(data)
if previous != nil {
previous.next = previous.next.next
previous.next.next = nil
}
table.length -= 1
}
func (table *link_table) insert(data table_data, previous *table_node) {
node := &table_node{data, previous.next}
previous.next = node
table.length += 1
}
func (table *link_table) append(data table_data) {
last := table.find_last()
table.insert(data, last)
}
func (table *link_table) size() int {
return table.length
}
//構(gòu)造函數(shù)
func new_link_table() *link_table {
head := table_node{table_data{}, nil}
return &link_table{head, 0}
}
復(fù)制
go筆記
- go語言的面向?qū)ο笫褂胹truct實現(xiàn),方法和屬性分開定義
- 方法的定義是
func (a *b) name () [return_type] {}
其中(a *b)
表示該函數(shù)是哪個類型的方法,調(diào)用過程中,.
運算符將運算符前的變量賦給a,類似于Python中的self
和C++中的this
指針 - 接口與C++中接口類似,可用于實現(xiàn)多態(tài),另外如果使用接口訪問"對象",可以保護對象的屬性和未在接口中聲明的方法,實現(xiàn)類似私有方法的功能
原文鏈接:https://blog.csdn.net/2301_78145669/article/details/131511791
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-05-31 docker-compose+nginx部署前后端分離的項目實踐_docker
- 2022-08-05 springBoot集成swagger啟動報錯:Failed to start bean ‘docu
- 2022-06-16 golang?gorm實現(xiàn)get請求查詢案例測試_Golang
- 2023-03-01 React?useState的錯誤用法避坑詳解_React
- 2022-06-22 Python?Tkinter?GUI編程實現(xiàn)Frame切換_python
- 2022-10-10 NumPy?數(shù)組屬性的具體使用_python
- 2024-01-30 df -h的值詳細介紹
- 2023-01-14 C/C++高精度(加減乘除)算法的實現(xiàn)_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支