zoukankan      html  css  js  c++  java
  • complexity_action

    大话数据结构

      1 /*
      2 顺序存储的结构 
      3 */
      4 #define MAXSIZE 20
      5 //存储空间初始分配量
      6 typedef int ElemType;
      7 //ElemType类型根据实际情况而定,这里假设为int
      8 typedef struct {
      9     ElemType data[MAXSIZE];
     10 //    数组存储数据元素,最大值为MAXSIZE
     11     int length;
     12 //    线性表当前长度
     13 } SqList;
     14 /*
     15 地址计算方法 
     16 
     17 每个数据元素,不管是整形、实型、字符型,它们都要占用一定的存储单元。
     18 假设为c单元,那么线性表中第i个数据元素和第i+1个数据元素的存储位置满足
     19 下列关系(LOC表述获得存储位置的函数):
     20 LOC(a_i_) = LOC(a_i-1_)+c
     21 (_表示下标的起始标志)
     22 LOC(a_i) = LOC(a_1_)+(i-1)*c
     23 
     24 计算线性表中任意位置的地址,时间相同。
     25 对每个线性表位置的存入或者取出数据,对于计算机而言,均为相等的时间,为一个常熟。
     26 时间复杂度
     27 存取时间性能
     28 O(1) 
     29 
     30 */
     31 
     32 /*
     33 顺序存储结构的插入与删除 
     34 */ 
     35 
     36 /*获得元素的操作*/ 
     37 #define OK 1
     38 #define ERROR 0
     39 #define TRUE 1
     40 #define FALSE 0
     41 typedef int Status;
     42 //Status 是函数的类型,其值是函数结果状态码,如OK
     43 //初始条件:顺序线性表L已存在,1<=i<=ListLength(L)
     44 //操作结果:用e返回L中第i个数据元素的值
     45 Status GetElem(SqList L, int i, ElemType *e) {
     46     if(L.length==0 || i<1 || i>L.length)
     47         return ERROR;
     48     *e=L.data[i-1];
     49     return OK;
     50 }
     51 //GetElem(L,i*e) 查 获得元素操作
     52 //时间复杂度O(1)
     53 
     54 /*
     55 插入操作
     56 */
     57 
     58 //ListInsert(*L,i,e) 增 添加元素操作
     59 //初始条件:顺序线性表L已存在,i<=i<=ListLength(L)
     60 //操作结果:在L中第i个位置之前插入新的数据元素e,L的长度增加1 
     61 Status ListInsert(SqList *L, int i, ElemType e) {
     62     int k;//???improve下移?
     63     if(L->length==MAXSIZE)
     64     //顺序线性表已满 
     65         return ERROR;
     66     if(L.length==0 || i<1 || i>L.length)
     67         return ERROR;
     68     if(i<=L->length) {
     69         for(k=L->length-1; k>=i-1; k--)
     70             L->data[k+1] = L->data[k];
     71     }
     72     L->data[i-1]=e;
     73     L->length++;
     74     return OK;
     75 }
     76 /*
     77 删除操作 
     78 */
     79 
     80 //初始条件:同上
     81 //删除结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 
     82 Status ListDelete(SqList *L, int i, ElemType *e) {
     83     int k;
     84     if(L->length==0)
     85     //线性表为空 
     86         return ERROR;
     87     if(i<1 || i>L->length)
     88         return ERROR;
     89     *e = L->data[i-1];
     90     if(i<L-length) {
     91         for(k=i; k<L->length; k++)
     92             L->data[k-1]=L->data[k];
     93     }
     94     L->length--;
     95     return OK;
     96 }
     97 
     98 /*
     99 插入和删除的时间复杂度
    100 最好的情况:元素要插入到最后一个位置或者删除最后一个元素
    101             不需要移动元素 
    102             O(1)
    103 最坏的情况:元素要插入到第一个位置或者删除第一个元素
    104             需要移动所有元素 
    105             O(n) 
    106 每个位置插入或删除呀元素的可能性相同
    107 平均复杂度
    108 O(n) 
    109 */

    线性表 linear list 

    n个数据元素的有限序列

    线性链表:每个节点只包含一个指针域

    循环链表 circular linked list

    O(1)

    将2个线性表合并成一个表,仅需将一个表的表尾和另一个表的表头相接:仅需改变2个指针值即可。

    双向链表 double linked list

    单链表 NextElem O(1)  PriorElem O(n)

     NextElem O(1)  PriorElem O(1)

    栈 stack 仅在表尾进行插入或删除操作的线性表

    top bottom  栈顶 栈底

    last in first out 后进先出

    队列 queue first in first out

    front rear 队头 队尾

    tree 4

    forest 互补相交的树的集合

    binary tree 

    树中不存在度大于2的节点

    满二叉树

    一棵深度为k且有2^k-1个结点的二叉树

  • 相关阅读:
    Volume 6. Mathematical Concepts and Methods
    git帮助网址
    ubuntu 下安装wine
    ubuntu 通过ppa源安装mysql5.6
    ubuntu qq安装
    ubuntu14.04 fcitx安装
    language support图标消失
    ubuntu root用户登陆
    ubuntu 安装codeblocks13.12
    ubuntu tomcat自启动
  • 原文地址:https://www.cnblogs.com/rsapaper/p/6029846.html
Copyright © 2011-2022 走看看