資料結構入門(一)棧的實現

2022-07-01 18:39:09 字數 2571 閱讀 6915

從這一篇文章開始,筆者將會正式進入資料結構的領域,後面也將會持續更新。

本文將會講述一種特殊的線性表結構:棧(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...