数据结构总结

一、思维导图

二、基本概念

1.数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等。
2.逻辑结构:数据之间的相互关系。
3.顺序存储结构中,线性表的逻辑顺序和物理顺序总是一致的。但在链式存储结构中,线性表的逻辑顺序和物理顺序一般是不同的。
4.时间复杂度:顺序表、链表删除、插入元素平均时间复杂度为o(n)。
5.空间复杂度:若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。

线性表

一.线性表的顺序存储结构:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。特点是随机存储,线性表中第个元素的位置LOC(ai)=LOC(a1)+(i-1)*len.
插入:插入新结点,之后结点后移。平均时间复杂度:O(n)
删除:删除节点,之后结点前移。平均时间复杂度:O(n)

二.线性表的链式存储结构:线性表中的元素存放在一组地址任意的存储节点,节点之间通过指针链接起来。

1.单链表

2.双向链表

3.循环链表

头插法建立链表

具体代码实现

void CreateListF(LinkList& L, int n)
{
	L = new LNode;
	L->next = NULL;
	int i;
    LinkList s;
	for (i = 0; i < n; i++)
	{
		s = new LNode;
		cin >> s->data;
		s->next = L->next;
		L->next = s;
	}
}

如,插入元素为 1 2 3 4 5,插入以后的结果为 5 4 3 2 1

尾插法建立链表

具体代码实现

void CreateListR(LinkList &L, int n)
{
    LinkList s, r;
    L = new LNode;
    r = L;
    int i;
    for (i = 0;i < n;i++)
    {
        s = new LNode;
        cin >> s->data;
        r->next = s;
        r = s;
    }
    r->next = NULL;
}

如,插入元素为 1 2 3 4 5,插入以后的结果为 1 2 3 4 5

栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。先进后出。top= -1时为空栈,top=0只能说明栈中只有一个元素,并且元素进栈时top++。
特点:后进先出(FILO)

应用:数值转换、括号匹配、表达式求值、实现递归

队列

队列:只允许在表的一端进行插入,另一端进行删除的线性表。
特点:先进先出(FIFO)
顺序队列:顺序存储结构。当头尾指针相等时队列为空。在非空队列里,头指针始终指向队头前一个位置,而尾指针始终指向队尾元素的实际位置
循环队列。在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界(MaxSize-1)时,其加1操作的结果是指向向量的下界0。除非向量空间真的被队列元素全部占用,否则不会上溢。
队空条件:rear == fronf
队满条件:(rear+1) % m == front,其中m为循环队列的最大长度
入队:(rear+1)% m
出队:(front+1)% m
计算队列长度:(rear-front+m)% m
应用:排队、医院挂号、打印机、操作系统

串:是由零个或多个字符组成的有限序列。长度为零的串称为空串,它不包含任何字符。

串和线性表的区别:

串是一种特殊的线性表,其中元素全部为字符型;
串通常以整体作为操作的对象,而线性表通常以单个元素作为操作的对象。

串的模式匹配

1.BF算法
BF算法的思想:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

2.KMP算法
KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。

posted @ 2020-03-28 18:06  ……,  阅读(238)  评论(0编辑  收藏  举报