配列とリストアルゴリズム

  1. 静的データ構造(静的データ構造)
    アレイ。
    連続して割り当てられたメモリ空間(連続割り当て)。
    高速、修正、削除、読み取り、ゆっくりと添加しました。
    静的なデータ構造の早期確立に最大の固定のメモリ空間を占有することができると宣言しなければならない、そう簡単にメモリの浪費につながります。
  2. 動的なデータ構造(動的なデータ構造)
    チェーン(リンクリスト)。
    不連続なメモリ空間。
    簡単に挿入、削除、トラブル、トラブルのデザインを見つけます。
    プログラムが実行された場合にのみ、メモリの割り当ては完全にメモリを節約するために、事前の予告なしに、行われます。
  • 行列乗算
    行列A(M、N)、行列B(N、P) - >行列C(M、P)は、
    一次元アレイに拡張するに動作
    割付:

      for i in range(M):
          for j in range(N):
              A[ i * N + j ] = num

    乗算:

      for i in range(M):
          for j in range(P):
              temp = 0
              for k in range(N):
                  temp = temp + int( A[ i * N + k ] ) * int( B[ k * P + j ] )
              C[ i * P + j ] = temp
  • 転置行列
    行列A(M、M)

      for i in range(M):
          for j in range(i):
              if i!= j:
                  A[i][j], A[j][ i] = A[j][ i], A[i][ j]
  • 片方向リンクリストの設立
    • クラスの定義 - 動的割り当てリストノードを生成します
      • ポインタフィールドを定義します。ポイントを次のノードに
      • 少なくとも一つのデータフィールドの定義
        class student:
            def __init__(self):
                self.name = ""
                self.score = 0
                self.next = None

      学生のノード単独リンクリストの設立:

        class Student:
            def __init__(self):
                self.name = ""
                self.score = 0
                self.next = None
      
        head = Student()
        ptr = head  # 存取指针的位置
        for i in range(5):
            new_data = Student()
            new_data.name = "张三"
            new_data.score = 90
            # ptr :指针,不破坏 head
            ptr.next = new_data
            ptr = ptr.next
      
        print('-->', ptr)
        for i in range(6):
            print('==>', head.next)
            head = head.next
    • 接続方法リンクリストの
      カスケード連結

        def concatlist(ptr1, ptr2):
            ptr = ptr1
            while ptr.next != None:
                ptr = ptr.next
            ptr.next = ptr2
            return ptr1
    • 削除されたノードの道リンクリスト
      1. 最初のノードを削除します。
        python top = head head = head.next
      2. 最後のノードを削除します
        python ptr.next = tail ptr.next = None
      3. 中間ノードを削除します。
        python Y = ptr.next ptr.next = Y.next
        def del_ptr(head, ptr):
            top = head
            if ptr.num == top.num:  # [ 1 ]
                head = head.next
            else:
                while top.next != ptr:  # 找到删除节点的前一个位置
                    top = top.next
                if ptr.next == None:  # [ 2 ]
                    top.next = None
                else:
                    top.next = ptr.next  # [ 3 ]
            return head
        ptr = head
        find = 0  # 未找到标记
        while ptr != None:
            if ptr.num == findword:  # findword 要查找的 num
                ptr = del_ptr(head, ptr)
                head = ptr
                find += 1
            ptr = ptr.next
    • リンクリストは、逆の方法
      ノードの位置を知らないでは3つのポインタ変数が必要です。

        class Employee:
            def __init__(self):
                self.num = 0
                self.next = None
      
        def invert(head):
            next = head
            cur = None
            while next != None:
                pre = cur
                cur = next
                next = next.next
                cur.next = pre
            return cur

      開始アドレス、寸法、インデックスの下限、要素の数、配列型:典型的には、いくつかのプロパティの配列を含む型構造。

      class Node:
        def __init__(self):
            self.data = ""
            self.next = None
      
        def insert(T, X, Y):
            node = Node()
            node.data = Y
            if T == None:
                T = I
                # I.next = None
            else:
                node.next = X.next
                X.next = node

おすすめ

転載: www.cnblogs.com/catyuang/p/11760485.html