数据结构知识总结

思维导图

重要概念的笔记

建立单链表

头插法

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

尾插法

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;
}

c++中的stack与queue

stack

 1. 定义stack对象的示例代码如下:
     stack<int>s1;
     stack<string>s2;
 2. 入栈:s1.push(x);
 3. 访问栈顶:s1.top();
 4. 判断栈空:s1.empty(),栈空时,返回true;
 5. 访问栈中元素个数:s1.size();

queue

  与stack模板相似,增加的如下:
 1. 访问对首元素:q1.front();
 2. 访问队尾元素:q1.back();

递归与栈的关系。递归的两大特点:

 1. 自我调用
 2.  必须要有递归出口

栈与队列的操作:

 1. 栈为先进后出,队列为先进先出
 2. 链栈插入和删除只能在表头进行,不用考虑溢出问题

 1. 串通常以串为整体作为操作对象
 2. 模式匹配
    BF算法(又称穷举的),主串中的n需要回溯,速度慢,最坏情况下的时间复杂度为O(n*m)
    KMP算法,主串中的n不需要回溯,速度快

数组

 数组的特点:
   数组的存储空间的一维的,而数组可以是多维的
   数组没有加工型操作

疑难问题及解决方案

求串的next值以及nextval的值

 1. 求next值需要看所求位置的前面前缀和后缀对应的个数

 2. 求nextval的值需要往前推算

6-7 jmu-ds-单链表逆置

    void ReverseList(LinkList &L)
   {
       LinkList s,r,p;
       p=L;
       s=new LNode;
       s->next=NULL;
       p=p->next;
       while(p)
       {
           r=new LNode;
           r->data=p->data;
           r->next=s->next;
           s->next=r;
           p=p->next;
       }
       L=s;
   }
posted @ 2020-03-28 20:43  陈小蛋  阅读(196)  评论(1编辑  收藏  举报