日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python數(shù)據(jù)結(jié)構(gòu)之線性順序表

本文轉(zhuǎn)載自微信公眾號(hào)「python與大數(shù)據(jù)分析」,作者一只小小鳥(niǎo)鳥(niǎo) 。轉(zhuǎn)載本文請(qǐng)聯(lián)系python與大數(shù)據(jù)分析公眾號(hào)。

線性表(linear list)是數(shù)據(jù)結(jié)構(gòu)的一種,一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。本文結(jié)合了互聯(lián)網(wǎng)上的一些代碼,以及結(jié)合百度百科關(guān)于線性順序表的定義,實(shí)現(xiàn)了全部代碼。

在稍復(fù)雜的線性表中,一個(gè)數(shù)據(jù)元素可由多個(gè)數(shù)據(jù)項(xiàng)(item)組成,此種情況下常把數(shù)據(jù)元素稱(chēng)為記錄(record),含有大量記錄的線性表又稱(chēng)文件(file)。

線性表中的個(gè)數(shù)n定義為線性表的長(zhǎng)度,n=0時(shí)稱(chēng)為空表。在非空表中每個(gè)數(shù)據(jù)元素都有一個(gè)確定的位置,如用ai表示數(shù)據(jù)元素,則i稱(chēng)為數(shù)據(jù)元素ai在線性表中的位序。

線性表的相鄰元素之間存在著序偶關(guān)系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一個(gè)順序表,則表中ai-1領(lǐng)先于ai,ai領(lǐng)先于ai+1,稱(chēng)ai-1是ai的直接前驅(qū)元素,ai+1是ai的直接后繼元素。當(dāng)i=1,2,…,n-1時(shí),ai有且僅有一個(gè)直接后繼,當(dāng)i=2,3,…,n時(shí),ai有且僅有一個(gè)直接前驅(qū) [1] 。

需要轉(zhuǎn)換思想的是,線性表中的參數(shù)也好,最大數(shù)量也好,要在列表序號(hào)基礎(chǔ)上加1

代碼如下:

 
 
 
  1. # 線性表(linear list)是數(shù)據(jù)結(jié)構(gòu)的一種,一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 
  2. # 在稍復(fù)雜的線性表中,一個(gè)數(shù)據(jù)元素可由多個(gè)數(shù)據(jù)項(xiàng)(item)組成,此種情況下常把數(shù)據(jù)元素稱(chēng)為記錄(record),含有大量記錄的線性表又稱(chēng)文件(file)。 
  3. # 線性表中的個(gè)數(shù)n定義為線性表的長(zhǎng)度,n=0時(shí)稱(chēng)為空表。在非空表中每個(gè)數(shù)據(jù)元素都有一個(gè)確定的位置,如用ai表示數(shù)據(jù)元素,則i稱(chēng)為數(shù)據(jù)元素ai在線性表中的位序。 
  4. # 線性表的相鄰元素之間存在著序偶關(guān)系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一個(gè)順序表,則表中ai-1領(lǐng)先于ai,ai領(lǐng)先于ai+1,稱(chēng)ai-1是ai的直接前驅(qū)元素,ai+1是ai的直接后繼元素。當(dāng)i=1,2,…,n-1時(shí),ai有且僅有一個(gè)直接后繼,當(dāng)i=2,3,…,n時(shí),ai有且僅有一個(gè)直接前驅(qū) [1]  。 
  5. # 1)MakeEmpty(L) 這是一個(gè)將L變?yōu)榭毡淼姆椒?nbsp;
  6. # 2)Length(L) 返回表L的長(zhǎng)度,即表中元素個(gè)數(shù) 
  7. # 3)Get(L,i) 這是一個(gè)函數(shù),函數(shù)值為L(zhǎng)中位置i處的元素(1≤i≤n) 
  8. # 4)Prior(L,i) 取i的前驅(qū)元素 
  9. # 5)Next(L,i) 取i的后繼元素 
  10. # 6)Locate(L,x) 這是一個(gè)函數(shù),函數(shù)值為元素x在L中的位置 
  11. # 7)Insert(L,i,x)在表L的位置i處插入元素x,將原占據(jù)位置i的元素及后面的元素都向后推一個(gè)位置 
  12. # 8)Delete(L,p) 從表L中刪除位置p處的元素 
  13. # 9)IsEmpty(L) 如果表L為空表(長(zhǎng)度為0)則返回true,否則返回false 
  14. # 10)Clear(L)清除所有元素 
  15. # 11)Init(L)同第一個(gè),初始化線性表為空 
  16. # 12)Traverse(L)遍歷輸出所有元素 
  17. # 13)Find(L,x)查找并返回元素 
  18. # 14)Update(L,x)修改元素 
  19. # 15)Sort(L)對(duì)所有元素重新按給定的條件排序 
  20. # 16) strstr(string1,string2)用于字符數(shù)組的求string1中出現(xiàn)string2的首地址 
  21. class Sequencelist(object): 
  22.     def __init__(self, datatype=int, maxlength=10): 
  23.         self.maxlength = maxlength 
  24.         self.currentnum = 0 
  25.         self.data = [None] * self.maxlength 
  26.         self.datatype = datatype 
  27.  
  28.     def __setitem__(self, key, value): 
  29.         if not isinstance(key, int): 
  30.             raise TypeError 
  31.         if not isinstance(value, self.datatype): 
  32.             raise TypeError("數(shù)據(jù)類(lèi)型不符合{0}".format(self.datatype)) 
  33.         if 0 <= key <= self.currentnum: 
  34.             self.data[key-1] = value 
  35.         else: 
  36.             raise IndexError 
  37.  
  38.     def __getitem__(self, key): 
  39.         if not isinstance(key, int): 
  40.             raise TypeError 
  41.         if 1 <= key <= self.currentnum: 
  42.             return self.data[key-1] 
  43.         else: 
  44.             raise IndexError 
  45.  
  46.     def __len__(self): 
  47.         return self.currentnum 
  48.  
  49.     def __repr__(self): 
  50.         return '__repr__={}'.format(str(self.data)) 
  51.  
  52.     def __str__(self): 
  53.         return '__str__={}'.format(str(self.data[:self.currentnum])) 
  54.  
  55.     def isempty(self): 
  56.         return self.currentnum == 0 
  57.  
  58.     def isfull(self): 
  59.         return self.currentnum == self.maxlength 
  60.  
  61.     def maxlength(self): 
  62.         return self.maxlength 
  63.  
  64.     def makeempty(self): 
  65.         self.clear() 
  66.  
  67.     def length(self): 
  68.         return self.__len__() 
  69.  
  70.     def count(self): 
  71.         return self.__len__() 
  72.  
  73.     def get(self, key): 
  74.         return self.__getitem__(key) 
  75.  
  76.     def set(self, key,value): 
  77.         self.__setitem__(key,value) 
  78.  
  79.     def prior(self, key): 
  80.         assert key>1 and key 
  81.         return self.data[key-2] 
  82.  
  83.     def next(self, key): 
  84.         assert key>=1 and key 
  85.         return self.data[key] 
  86.  
  87.     def locate(self, value,start=0): 
  88.         for i in range(start,self.currentnum): 
  89.             if self.data[i]==value: 
  90.                 return i+1 
  91.         raise ValueError("{} is not find in list".format(value)) 
  92.  
  93.     def index(self,value,start=0): 
  94.         return self.locate(value,start) 
  95.  
  96.     def append(self,value): 
  97.         if self.isfull(): 
  98.             print('list is full') 
  99.             return 
  100.         else: 
  101.             self.data[self.currentnum]=value 
  102.             self.currentnum+=1 
  103.  
  104.     def insert(self, key, value): 
  105.         if not isinstance(key,self.datatype): 
  106.             raise TypeError 
  107.         if key<1: 
  108.             raise IndexError 
  109.         if key>=self.currentnum: 
  110.             self.append(value) 
  111.         else: 
  112.             for i in range(self.currentnum,key-1,-1): 
  113.                 self.data[i]=self.data[i-1] 
  114.             self.data[key-1]=value 
  115.             self.currentnum+=1 
  116.  
  117.     def delete(self, key): 
  118.         if not isinstance(key, self.datatype): 
  119.             raise TypeError 
  120.         if key < 1 and key>self.currentnum: 
  121.             raise IndexError 
  122.         else: 
  123.             for i in range(key-1,self.currentnum): 
  124.                 self.data[i]=self.data[i+1] 
  125.             self.currentnum-=1 
  126.  
  127.     def pop(self): 
  128.         return self.delete(self.currentnum) 
  129.  
  130.     def clear(self): 
  131.         self.__init__() 
  132.  
  133.     def init(self): 
  134.         self.__init__() 
  135.  
  136.     def reverse(self): 
  137.         i,j=0,self.currentnum-1 
  138.         while i
  139.             self.data[i],self.data[j]=self.data[j],self.data[i] 
  140.             i,j=i+1,j-1 
  141.             #print(self.data) 
  142.  
  143.     def find(self, value,start=0): 
  144.         return self.locate(self,value,start) 
  145.  
  146.     def update(self, key,value): 
  147.         self.__setitem__(key,value) 
  148.  
  149.     def sort(self): 
  150.         for i in range(0,self.currentnum-1): 
  151.             for j in range(i+1,self.currentnum): 
  152.                 if self.data[i]>self.data[j]: 
  153.                     self.data[i],self.data[j]=self.data[j],self.data[i] 
  154.  
  155.     def strstr(string1, string2): 
  156.         pass 
  157.  
  158.  
  159. if __name__ == '__main__': 
  160.     a=Sequencelist() 
  161.     a.append(1) 
  162.     a.append(2) 
  163.     a.append(3) 
  164.     print(a) 
  165.     print(repr(a)) 
  166.     b=a.locate(2) 
  167.     print(b) 
  168.     print(a.isempty()) 
  169.     print(a.isfull()) 
  170.     print(len(a)) 
  171.     print(a.length()) 
  172.     #print(a.prior(1)) 
  173.     # AssertionError: 數(shù)組越界 
  174.     print(a.prior(2)) 
  175.     print(a.prior(3)) 
  176.     print(a.next(1)) 
  177.     print(a.next(2)) 
  178.     print(a) 
  179.     print(a.get(2)) 
  180.     a.insert(2,4) 
  181.     print(a) 
  182.     a.delete(2) 
  183.     print(a) 
  184.     print(a.length()) 
  185.     a.pop() 
  186.     print(a) 
  187.     print(a.length()) 
  188.     a.update(2,4) 
  189.     print(a) 
  190.     print(a.index(4)) 
  191.     # print(a.index(5)) 
  192.     # ValueError: 5 is not find in list 
  193.     print(a) 
  194.     a.reverse() 
  195.     print(a) 
  196.     a.append(3) 
  197.     a.append(5) 
  198.     # a.append(2) 
  199.     print(a) 
  200.     a.sort() 
  201.     print(a) 

結(jié)果如下:

 
 
 
  1. C:\python\pyproject\pythonalgorithms\venv\Scripts\python.exe C:/python/pyproject/pythonalgorithms/sequencelist.py 
  2. __str__=[1, 2, 3] 
  3. __repr__=[1, 2, 3, None, None, None, None, None, None, None] 
  4. False 
  5. False 
  6. __str__=[1, 2, 3] 
  7. __str__=[1, 4, 2, 3] 
  8. __str__=[1, 2, 3] 
  9. __str__=[1, 2] 
  10. __str__=[1, 4] 
  11. __str__=[1, 4] 
  12. __str__=[4, 1] 
  13. __str__=[4, 1, 3, 5] 
  14. __str__=[1, 3, 4, 5] 
  15.  
  16. Process finished with exit code 0 

文章名稱(chēng):Python數(shù)據(jù)結(jié)構(gòu)之線性順序表
網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/djoijcs.html