首页 > 其他 > 详细

数据结构概念总结

时间:2020-03-28 15:46:46      阅读:49      评论:0      收藏:0      [点我收藏+]

? ? ? ? ?数 据 结 构? ? ? ??

一.思维导图

技术分享图片


二.重要概念的笔记

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

数据结构概念总结

原文:https://www.cnblogs.com/hcy420/p/12587333.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!