日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组与链表

發布時間:2024/7/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组与链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.數組

1.python實現數組的增刪查改

class Array:def __init__(self, data):self.__data = datadef find(self, index):"""index of data:param index::return:"""if index > len(self.__data) or index < 0:return Falseelse:return self.__data[index]def delete(self, index):"""delete function:param index::return:"""if index > len(self.__data) or index < 0:return Falseelse:self.__data.pop(index)return Truedef insert(self, index, value):"""insert function:param index::param value::return:"""if index > len(self.__data) or index < 0:return Falseelse:self.__data.insert(index, value)return Truedef insertToTail(self, value):"""insert data ,at tail:param value::return:"""self.__data.append(value)def printAll(self):print(self.__data) if __name__ == '__main__':data=[1,2,3,4]arr = Array(data)print('=======origin data============')arr.printAll()print('==========find data======================')print(arr.find(1))print("==========insert data ============")arr.insert(2,10)arr.printAll()print('========delete data==================')arr.delete(3)arr.printAll()

2.合并兩個有序數組

https://leetcode-cn.com/problems/merge-sorted-array/submissions/

class Solution:def merge(self, nums1, m, nums2, n):while nums1[-1]==0:if len(nums1)==m:breaknums1.pop()if nums1==[]:breaknums1.extend(nums2)nums1.sort()return nums1if __name__ == '__main__':sol=Solution()nums1=[1,2,3,0,0,0]m=3nums2=[2,5,6]n=3res=sol.merge(nums1,m,nums2,n)print(res)

二.鏈表

鏈表分為 4 種情況:單鏈表,單循環鏈表,雙鏈表,雙循環鏈表.

其中:data存儲當前節點數值;

next存儲下一個節點的位置.

from typing import Optionalclass Node:def __init__(self, data, next_node=None):self.data = dataself._next = next_nodeclass SinglyLinkedList:def __init__(self):self._head = Nonedef find_by_value(self, value):p = self._headwhile p and p.data != value:p = p._nextreturn pdef find_by_index(self, index):p = self._headposition = 0while p and position != index:p = p._nextposition += 1return pdef insert_value_to_head(self, value):new_node = Node(value)self.insert_node_to_head(new_node)def insert_node_to_head(self, new_node):if new_node:new_node._next = self._headself._head = new_nodedef insert_value_after(self, node, value):new_node = Node(value)self.insert_node_after(node, new_node)def insert_node_after(self, node, new_node):if not node or not new_node:returnnew_node._next = node._nextnode._next = new_nodedef insert_value_before(self, node, value):new_node = Node(value)self.insert_node_before(node, new_node)def insert_node_before(self, node, new_node):if not self._head or not node or not new_node:returnif self._head == node:self.insert_node_to_head(new_node)returncurrent = self._headwhile current._next and current._next != node:current = current._nextif not current._next: # node is not even in the listreturnnew_node._next = nodecurrent._next = new_nodedef delete_by_node(self, node):if not self._head or not node:returnif node._next:node.data = node._next.datanode._next = node._next._nextreturn# node is the last one or not in the listcurrent = self._headwhile current and current._next != node:current = current._nextif not current: # node not in the listreturncurrent._next = node._nextdef delete_by_value(self, value):if not self._head or not value:returnfake_head = Node(value + 1)fake_head._next = self._headprev, current = fake_head, self._headwhile current:if current.data != value:prev._next = currentprev = prev._nextcurrent = current._nextif prev._next:prev._next = Noneself._head = fake_head._next # in case head.data == valuedef __repr__(self):nums = []current = self._headwhile current:nums.append(current.data)current = current._nextreturn "->".join(str(num) for num in nums)# 重寫__iter__方法,方便for關鍵字調用打印值def __iter__(self):node = self._headwhile node:yield node.datanode = node._nextdef print_all(self):current = self._headif current:print(f"{current.data}", end="")current = current._nextwhile current:print(f"->{current.data}", end="")current = current._nextprint("\n", flush=True)if __name__ == "__main__":l = SinglyLinkedList()for i in range(15):l.insert_value_to_head(i)print('==========initialization====================')print('l:',l)node9 = l.find_by_value(9)print('============insert=========================')l.insert_value_before(node9, 20)print('l:', l)l.insert_value_before(node9, 16)l.insert_value_before(node9, 16)print('============delete============================')l.delete_by_value(16)print('l:', l)print('============find=============================')node11 = l.find_by_index(3)l.delete_by_node(node11)l.delete_by_node(l._head)l.delete_by_value(13)print(l)# for value in l:# print(value)

總結

以上是生活随笔為你收集整理的数组与链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。