数据结构概念总结

         数 据 结 构        

一.思维导图


二.重要概念的笔记

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]。

posted @ 2020-03-28 14:57  羊腿桂鱼yu  阅读(167)  评论(0编辑  收藏  举报