实用数据结构知识点

线性表

动态与静态数据结构在计算机内存中的存储方式有何不同?各有何优缺点?
参考答案:静态存储方式(顺序存储)——逻辑相邻,物理相邻。优点:便于数据的随即存取,结点存储利用率高(不需要存储指针);缺点:存取数据时要移动大量的元素,由于事先不知道存储结点的最大个数,所以应该分配尽可能大的存储空间,从而可能会造成空间浪费!
动态存储方式(链式存储)——逻辑相邻,物理不一定相邻。优点:动态分配和释放存储单元,避免了空间浪费,插入删除结点不需要移动大量的其他结点,只需要修改有限的指针变量;缺点:不具备顺序存储结构随即存取的优点,查找结点需要从表头开始,一个结点的存储利用率较低,以为每个结点都要存储一个指向下个结点的指针变量。

栈和队列

栈和队列的区别?

栈和队列都是操作受限的线性表,因此二者都具备线性表的一般特性;对于栈,元素进栈出栈的原则是“后进先出”,即LIFO,对于队列,元素进出队列的原则是“先进先出”,即FIFO。

迷宫算法

 

算符优先法

 

括号配对

 

递归

N皇后

def isSafe(board,row, col):
    for i in range(row):
        if board[i][col] == 1:
            return False
    for i,j in zip(range(row,-1,-1),range(col,-1,-1)):#左上对角线
        if board[i][j] == 1:
            return False
    for i,j in zip(range(row,-1,-1),range(col,N,1)):#右上对角线
        if board[i][j] == 1:
            return False
    return True
def Nqueen(row=0):
    if row==N:
        printSolution(board)
    for i in range(N):#判断该行的哪一列可以进行皇后放置
        if isSafe(board,row,i):
            board[row][i]=1
            if Nqueen(row+1):
                return True
            board[row][i]=0#进行到这一步就说明递归过程中此路不通,因此不在这里放置皇后
    return False
def printSolution(board):
    for row in board:
        line = ""
        for col in row:
            if col == 1:
                line += "Q\t"
            else:
                line += ".\t"
        print(line, "\n")
    print('\n')
if __name__=='__main__':
    N=5
    board = [[0 for _ in range(N)] for _ in range(N)]
    Nqueen()
class solution(object):
    def solveNQueens(self, n):
        self.helper([-1] * n, 0, n)
    def helper(self, columnPosition, rowindex, n):
        if rowindex == n:
            self.printSolution(columnPosition, n)
            return
        for column in range(n):
            columnPosition[rowindex] = column#判断该行的哪一列可以进行皇后放置,最后里面的值便是一直递归下去可行的值
            if self.isValid(columnPosition, rowindex):
                self.helper(columnPosition, rowindex + 1, n)
    def isValid(self, columnPosition, rowindex):
        if len(set(columnPosition[:rowindex + 1])) != len(columnPosition[:rowindex + 1]):#判断前面行的皇后的列是否与rowindex皇后的列相等
            return False
        for i in range(rowindex):
            if abs(columnPosition[i] - columnPosition[rowindex]) == int(rowindex - i):#则说明在对角线上
                return False
        return True
    def printSolution(self, columnPosition, n):
        for row in range(n):
            line = ""
            for column in range(n):
                if columnPosition[row] == column:
                    line += "Q\t"
                else:
                    line += ".\t"
            print(line, "\n")
        print('\n')

solution().solveNQueens(4)

斐波那契,n!(此处不举例)

 字符串

模式匹配BF、KMP、BM、Sunday

树行结构

 

 

查找

 

排序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值