棧是限制插入和刪除只能在一個(gè)位置上進(jìn)行的表,該位置是表的末端,叫做棧頂。
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、新會ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的新會網(wǎng)站制作公司棧有時(shí)又叫LIFO(先進(jìn)后出)表。
對棧的操作有Push(進(jìn)棧)和Pop(出棧),前者相當(dāng)于插入,后者相當(dāng)于刪除最后插入的元素。
以下用雙向鏈表和切片實(shí)現(xiàn)分別實(shí)現(xiàn)棧操作
//stack //用雙向鏈表實(shí)現(xiàn)stack type Element interface {} var header *entry //鏈表表頭 var size int //棧的長度 type entry struct { previous *entry next *entry element Element } func newEntry(prev,next *entry,e Element) *entry { return &entry{prev,next,e} } //初始化header 表頭 func NewStack() *entry { header = newEntry(nil,nil,nil) header.previous =header header.next = header return header } type Stack interface { Push(e Element) //向棧頂添加元素 Pop() Element //移除棧頂元素 Top() Element //獲取棧頂元素(不刪除) Clear() bool //清空棧 Size() int //獲取棧的元素個(gè)數(shù) IsEmpty() bool //判斷棧是否是空棧 } //向棧頂添加元素 func (e *entry) Push(element Element) { addBefore(header,element) } //移除棧頂元素 func (e *entry) Pop() Element { if e.IsEmpty() { fmt.Println("stack is empty!") return nil } prevEntry := header.previous prevEntry.previous.next = header header.previous = prevEntry.previous size-- return prevEntry.element } //獲取棧頂元素(不刪除) func (e *entry) Top() Element { if e.IsEmpty() { fmt.Println("stack is empty!") return nil } return header.previous.element } //清空棧 func (e *entry) Clear() bool { if e.IsEmpty() { fmt.Println("stack is empty!") return false } entry := header.next for entry != header { nextEntry := entry.next entry.next = nil entry.previous = nil entry.element = nil entry = nextEntry } header.next = header header.previous = header size =0 return true } func (e *entry) Size() int { return size } func (e *entry) IsEmpty() bool { if size == 0 { return true } return false } //在entry節(jié)點(diǎn)之前添加 func addBefore(e *entry,element Element) Element{ newEntry := newEntry(e.previous,e,element) newEntry.previous.next = newEntry newEntry.next.previous = newEntry size++ return newEntry } //**************************************** //**************************************** //用切片實(shí)現(xiàn)Stack type sliceEntry struct{ element []Element } func NewSliceEntry() *sliceEntry { return &sliceEntry{} } func (entry *sliceEntry)Push(e Element) { entry.element = append(entry.element,e) } func (entry *sliceEntry)Pop() Element { size := entry.Size() if size == 0 { fmt.Println("stack is empty!") return nil } lastElement := entry.element[size-1] entry.element[size-1] = nil entry.element = entry.element[:size-1] return lastElement } func (entry *sliceEntry)Top() Element { size := entry.Size() if size == 0 { fmt.Println("stack is empty!") return nil } return entry.element[size-1] } func (entry *sliceEntry)Clear() bool { if entry.IsEmpty() { fmt.Println("stack is empty!") return false } for i :=0;i以上就是golang 怎么設(shè)計(jì)一個(gè)棧的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文標(biāo)題:如何用go語言設(shè)計(jì)一個(gè)棧?-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/dicdpi.html