從這一篇文章開始,筆者將會正式進入資料結構的領域,後面也將會持續更新。
本文將會講述一種特殊的線性表結構:棧(stack)。
棧,是限定僅在表尾進行插入或刪除操作的線性表。因此,對棧來說,表尾端有其特殊含義,稱為棧頂(top),相應地,表頭端稱為棧底(bottom)。不含任何元素的空表稱為空棧。
假設棧\(s=(a_,a_,...,a_),\)則稱\(a_\)為棧底元素,\(a_\)為棧頂元素。棧中元素按\(a_,a_,...,a_\)的次序進棧,退棧的第乙個元素應為棧頂元素。換句話說,棧的修改是按後進先出的原則進行的,如下圖所示:
因此,棧又被稱為後進先出(last in first out)的線性表(簡稱lifo結構)。
棧的基本操作有:棧的初始化,判斷是否為空,取棧頂元素,在棧頂進行插入和刪除等。我們將借助python中的列表來實現棧這個結構,完整的python**(stack.py)如下:
# -*- coding: utf-8 -*-
class empty(exception):
# error attempting to access an element from an empty container
pass
class stack:
# initialize
def __init__(self):
self.__data =
# length of stack
def __len__(self):
return len(self.__data)
# whether the stack is empty
def is_empty(self):
return len(self.__data) == 0
# push an element is stack
def push(self, e):
# top element of stack
def top(self):
if self.is_empty():
raise empty('stack is empty')
return self.__data[-1]
# remove the top element of stack
def pop(self):
if self.is_empty():
raise empty('stack is empty')
return self.__data.pop()
在上述**中,我們先定義了乙個錯誤型別empty,當你試圖從乙個空的容器中獲取元素時,則會提示這個錯誤。接下來,定義了類stack來實現棧,實現的方法分別為:棧的初始化,棧的長度,判斷棧是否為空,元素入棧,棧頂元素,元素退棧。
我們先來測試下棧的使用情況,**如下:
from stack import stack
s = stack()
s.push(5)
s.push(3)
print(len(s))
print(s.pop())
print(s.is_empty())
print(s.pop())
print(s.is_empty())
s.push(7)
s.push(9)
print(s.top())
s.push(4)
print(len(s))
print(s.pop())
輸出結果如下:
2
3false
5true93
4
十進位制數n和其他d進製數的轉換是計算機實現計算得基本問題,其解決方法如下:
n = (n div d) * d + n mod d(其中,div為整除運算,mod為求餘運算)。
例如,\((2018)_=(3742)_\),其運算結果如下:
nn div 8
n mod 8
2018
2522
25231431
3730
3因此,如果我們需要將十進位制數n轉化為其他d進製數,比如8,我們只需要將第三列的n mod 8逆序輸出即可,這可以借助棧很好地實現,實現的python**如下:
from stack import stack
# 十進位制數
n = 2018
s = stack()
while n:
s.push(n % 8)
n //= 8
# 八進位制數
while not s.is_empty():
print(s.pop(), end='')
輸出結果如下:
3742
資料結構 實現棧
include include include define node len sizeof node 1 pstack ptop pstack pbottom都指向節點 typedef struct node pnode,node typedef struct stack pstack,stack...
資料結構 棧實現
棧和佇列不一樣,棧是後進先出。實現時用了陣列儲存棧,陣列大小根據內容自動擴充。廢話不多說,上 c mystack.h pragma once templateclass mystack templateint mystack getcount templatet mystack top templa...
資料結構 棧的實現
1 定義資料元素類 data package stack public class data override public string tostring 2 定義棧結構類 stacktype package stack public class stacktype 判斷是否空棧 return p...