zoukankan      html  css  js  c++  java
  • 数据结构概念总结

             数 据 结 构        

    一.思维导图


    二.重要概念的笔记

    1.线性表:

    1.除头结点无前驱有一个后继,尾结点无后继有一个前驱,其他节点均含有一个与之对应的前驱和后继。链表只能顺序查找,相应操作的时间复杂度:

    • 找到指定元素:O(n)

    • 插入删除结点:O(n)

      2.链表的查找:从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表不是随机存取结构

      3.链表的插入:先找到表的第i-1的存储位置,然后插入。新结点先连后继,再连前驱。

      4.链表的删除:首先找到i-1的存储位置p。然后令p–>next指向i的直接后继结点。最后释放结点i的空间.r=p->next;p->next=r->next;delete r;

    2.栈和队列:

    • 1.栈(LIFO):限制在栈顶进行插入和删除操作,包含顺序栈和链栈。可以用来解决迷宫问题、括号配对问题、递归等
    #include<stack>
    
    stack<int>s;//定义栈s
    
    s.push();//入栈
    
    s.pop();//栈顶元素出栈
    
    s.empty();//判断栈是否为空
    
    • 2.队列(FIFO):限制在队列的一端进行插入队尾(rear),另一端进行删除队头(front),包含顺序队列和链队列。可以用来解决迷宫问题、递归等。
    #include<queue>
    
    stack<int>q;//定义队列q
    
    q.push();//将元素接到队列的尾端
    
    q.pop();//将队列中第一个元素弹出
    
    q.empty();//判断队列是否为空
    

    3.串:

    串是一个特殊的线性表,其数据元素可以是多个字符,模式匹配是串的一种重要运算。串既可以采用顺序存储结构,也可以采用链式存储结构。其中难点是KMP算法。

    #include<string>
    
    string str;//定义串str
    

    4.数组和广义表

    1. 数组:数组的顺序存储分行优先列优先

    2. 广义表(Lists,又称列表):是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。广义表是n(n≥0)个元素a1,a2,…,ai,…,an的有限序列。


    三.疑难问题及解决方案

    1.模式串t=“abcaa”,以表格展示next 和nextval数组值。

    j 0 1 2 3 4
    t[j] a b c a a
    next[j] -1 0 0 0 1
    nextval[j] -1 0 0 -1 1

    起初自己预习计算nextval值时,以为当next[j]与t[j]相等时,nextval[j]的值为next[j]-1,当next[j]与t[j]不相等时,nextval[j]=next[j]。直到课堂上发现我自己理解有误,计算的结果与答案不符。于是我课后去网站上搜索了一番,反复观看kmp算法讲解视频,最后懂得了nextval的正确计算方法是:当next[j]与t[j]相等时,nextval[j]=nextval[next[j]],当next[j]与t[j]不相等时,nextval[j]=next[j]。

  • 相关阅读:
    数组中重复的数字
    第一个只出现一次的字符位置
    丑数
    字符串的排列
    把数组排成最小的数
    圆圈中最后剩下的数
    同步通信与异步通信
    S3C2440 UART串口驱动
    ARM处理器工作模式
    s3c2440系统时钟
  • 原文地址:https://www.cnblogs.com/hcy420/p/12587333.html
Copyright © 2011-2022 走看看