大话数据结构

 /*
顺序存储的结构
*/
#define MAXSIZE 20
//存储空间初始分配量
typedef int ElemType;
//ElemType类型根据实际情况而定,这里假设为int
typedef struct {
ElemType data[MAXSIZE];
// 数组存储数据元素,最大值为MAXSIZE
int length;
// 线性表当前长度
} SqList;
/*
地址计算方法 每个数据元素,不管是整形、实型、字符型,它们都要占用一定的存储单元。
假设为c单元,那么线性表中第i个数据元素和第i+1个数据元素的存储位置满足
下列关系(LOC表述获得存储位置的函数):
LOC(a_i_) = LOC(a_i-1_)+c
(_表示下标的起始标志)
LOC(a_i) = LOC(a_1_)+(i-1)*c 计算线性表中任意位置的地址,时间相同。
对每个线性表位置的存入或者取出数据,对于计算机而言,均为相等的时间,为一个常熟。
时间复杂度
存取时间性能
O(1) */ /*
顺序存储结构的插入与删除
*/ /*获得元素的操作*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
//Status 是函数的类型,其值是函数结果状态码,如OK
//初始条件:顺序线性表L已存在,1<=i<=ListLength(L)
//操作结果:用e返回L中第i个数据元素的值
Status GetElem(SqList L, int i, ElemType *e) {
if(L.length== || i< || i>L.length)
return ERROR;
*e=L.data[i-];
return OK;
}
//GetElem(L,i*e) 查 获得元素操作
//时间复杂度O(1) /*
插入操作
*/ //ListInsert(*L,i,e) 增 添加元素操作
//初始条件:顺序线性表L已存在,i<=i<=ListLength(L)
//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度增加1
Status ListInsert(SqList *L, int i, ElemType e) {
int k;//???improve下移?
if(L->length==MAXSIZE)
//顺序线性表已满
return ERROR;
if(L.length== || i< || i>L.length)
return ERROR;
if(i<=L->length) {
for(k=L->length-; k>=i-; k--)
L->data[k+] = L->data[k];
}
L->data[i-]=e;
L->length++;
return OK;
}
/*
删除操作
*/ //初始条件:同上
//删除结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
Status ListDelete(SqList *L, int i, ElemType *e) {
int k;
if(L->length==)
//线性表为空
return ERROR;
if(i< || i>L->length)
return ERROR;
*e = L->data[i-];
if(i<L-length) {
for(k=i; k<L->length; k++)
L->data[k-]=L->data[k];
}
L->length--;
return OK;
} /*
插入和删除的时间复杂度
最好的情况:元素要插入到最后一个位置或者删除最后一个元素
不需要移动元素
O(1)
最坏的情况:元素要插入到第一个位置或者删除第一个元素
需要移动所有元素
O(n)
每个位置插入或删除呀元素的可能性相同
平均复杂度
O(n)
*/

线性表 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个结点的二叉树

complexity_action的更多相关文章

随机推荐

  1. JAVA自定义注解 和 运行时靠 反射获取注解,解决 shiro 注解型权限因子获取问题

    项目的权限分配,采用的是RBAC的设计模式.后台配置权限的时候,需要获取到所有的权限因子. 不经让我想起YII框架的SRBAC模块,还有以前的一个ecshop改造系统的权限配置方式,都采用的是PHP的 ...

  2. HTML 引用

    关于 HTML 引用: (1) <q> 和 <blockquote> 用于实现长短不一的引用语(2) <q> 用于短的引用,<blockquote> 用 ...

  3. AddChild

    using UnityEngine; using UnityEngine; using UnityEditor; using System.Collections; public class AddC ...

  4. React Native(九)——实现仿微信朋友圈发表动态功能

    好像很久都没写博客了,罪过罪过~ 许是因为刚接触App有点生疏不得窍门吧,这个月还没有更新过文章.小个把月下来,还是觉得应该边学边总结,这样才能像大神靠近(最近刚接触同业的大牛级人物,还是从中学到了很 ...

  5. Java中过滤器和拦截器的区别

    1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器. 3.拦截器只对action起作用,而过滤器几乎可以对所有请求起 ...

  6. 【cs229-Lecture2】Gradient Descent 最小二乘回归问题解析表达式推导过程及实现源码(无需迭代)

    视频地址:http://v.163.com/movie/2008/1/B/O/M6SGF6VB4_M6SGHJ9BO.html 机器学习课程的所有讲义及课后作业:http://pan.baidu.co ...

  7. MFC onchar()

    为什么在CView类中可以对ON_CHAR进行相应,添加消息处理函数onchar就可以了,但是在CDialog中要对ON_CHAR相应,直接添加不行? CView相当于Text控件,你可以在Text控 ...

  8. HR别掉坑里了,送你最精确的计薪算法!

      月工资的计算方式有多种多样.即便是资深的HR,也会犯常识性的错误,正算反算,哪一个方法更适合,有时还会容易出现数字偏差,回想一下,你们公司的工资是如何计算的? 第一 劳动工资计算标准按几天计算 根 ...

  9. LeetCode 41 First Missing Positive(找到数组中第一个丢失的正数)

    题目链接: https://leetcode.com/problems/first-missing-positive/?tab=Description   给出一个未排序的数组,求出第一个丢失的正数. ...

  10. Linux上的ftp服务器vsftpd之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传

    一.问题背景 没事谁折腾这鬼玩意哦...还不是因为bug. 我们的应用,用户头像是存在ftp上的.之前的ftp服务器是一台windows,我们后台服务器程序收到用户上传头像的请求时,会用一个ROOT/ ...