C++数据结构(一)


3/18/2019 后端 C/C++ 数据结构和算法 所有文章

前置的一些东西

书上都有的我就不写了比如什么数据元素数据项等等,只及以下经常提到的或者自己对概念的理解。想看概念去 [1]数据结构严蔚敏C语言版p4序章1.2,我也是看着这个书写的
算法的特性:

  • 有穷(能执行完),
  • 确定(每条指令有明确含义无二义性,相同输入会有相同输出),
  • 可行性(可以由有限个指令实现),
  • 有一个或多个输入/输出
    良好算法要求:
  • 正确(边缘的数据也能得到预期输出)
  • 可读性,
  • 健壮性(鲁棒性鲁大营老师很棒(。・∀・)ノ对于莫名其妙的输入也能处理不会崩)
  • 时间空间复杂度良好。

# 时间复杂度

# 空间复杂度

# 线性表(LinerTable)

一般的线性表系统已经实现好了,自己再实现一次差不多就是对系统的list进行封装而已,注意内存地址连续。
性质:

  • 有穷性有限个元素,元素长度就是表长
  • 有前驱和后继节点,只有一个直接前驱和直接后继,头无前驱尾无后继
  • 同一性,数据元素类型必需相同
  • 有序性,存在序偶关系

顺序表也就是数组,直接存放在连续的内存中,物理内存对应和顺序是一致的。从0开始数不能切片
基本操作:初始化插入查找删除修改求长度
线性表查找插入等的时间耗费主要在表中结点的移动操作上,设在线性表L中的第i元素之前插入结点的概率为Pi,设各个位置插入是等概率,则Pi=1/(n+1)?.而插入时移动结点的次数为n-i+1. 总的平均移动次数:Einsert=ΣPi*(n-i+1) (1<i<n) Einsert=n/2 即在顺序表上做插入运算,平均要移动表上一半结点。当表长n较大时,算法的效率相当低。因此算法的平均时间复杂度为 O(n).

动态分配

动态分配p=(LNode*)malloc(sizeof(LNode));
函数malloc分配了一个类型为LNode的结点变量的空间,并其首地址放入指针变量p中。
动态释放free(p);系统回收由指针变量p所指向的内存区。p必须是最近一次调用malloc函数时的返回值。

# 链表

一维,顺序存储的数据元素,可以直接用while进行遍历。只能从头开始,因为没有指向上一个的指针,而且有时候都没有变量名,就维护一个表。表头没有上一个结点,表尾没有下一个节点指向nullptr

点击查看线性表代码
/*include here*/
#include "iostream"
#include "string"
/*define here*/

using namespace std;
/*function&class*/

static int num=0;//表示这是创建的第几个node
class Liner {
private :
    string value;
    Liner *next;
public:
    string GetValue(){//get 方法
        return this->value;
    }
    int SetValue(string &v){//set方法
        this->value=v;
        return 1;
    }
    Liner GetNext(){
        if (this->next!= nullptr){
            return *this->next;//取值
        }
        else{
            cout<<"no next node"<<endl;
        }
    }

    Liner(string value="no first data set!",Liner *next=nullptr){
        this->value = value;
        this->next = next;
    }
};

//entry
int main() {
    cout << "hello world" << endl;
    Liner B("you succeed");
    Liner A("12345",&B);
    cout<<A.GetNext().GetValue()<<endl;

    return 0;
}
/*
created by a_little_rubbish
have a nice day : )
*/

# 链表插入,遍历,删除相同元素

链表删除相同的值,单链表往后循环的比,挨个删除

# 链表有序合并

# 双向链表&循环链表

插入,删除+删除相同元素(注意顺序或者用暂时的指针存储两种断表方式),遍历

# 一些应用

一元多项式的相加

(浮点系数为0怎么办1.0e-6)

头结点的范围值删除

原空间就地逆序

Last Updated: 11/8/2019, 3:50:25 PM