Abstract:本章所记录的知识是后面章节需要的前导知识,请务必仔细读本章,理解涉及的知识点,方便后面章节的学习。本次数据结构笔记主要参考殷人昆的《数据结构(C语言描述)》这本书,需要的语言基于C,但是在C++的环境中进行编译,就是建立C++的项目在里面跑C语言的程序。

1.C语言指针

  http://www.cnblogs.com/HurryXin/p/6547831.html

2.typedef

  自己感觉主要功能时重命名形式,看一下几个例子:

(1)

  typedef int DataType;  

  这里是将int重命名为DataType类型。可以这么理解,DataType a这里的a是int型的,与int a是等价的。

  那为什么会使用typedef呢?

  设想在一个程序中定义了a这个int型变量,写了一大堆代码,结果最后发现我要用float或者其他的数据类型,那就慢慢一个一个换吧,凡是相关的全部换掉。但是使用typedef就容易多了,只需要将typedef int DataType;的int转换成float即可。

(2)

 typedef struct {
     DataType a;
     int n;
 }SeqList;

  定义的结构体名字叫SeqList,以后可以使用SeqList定义新的变量。

3.typedef与指针的特殊情况

  这里主要解释两种用法,具体的代码先不体现以后会有的:

(1)

  typedef struct node{

    }LinkNode,*LinkList;  

  看到这种定义不知道是否很困惑,这里的typedef为什么后面跟着两个参数,这里简单理解为将struct node重命名为两个,但是两者又不一样。

  LinkNode可以理解为一个数组其中的一个节点,而*LinkList则是该数组节点的地址,看着很难理解,画个图吧!

  LinkNode与LinkList其实内容相同,但是又不完全相同。

(2)

  LinkNode * Search(…);

  这里被调函数为什么返回值是LinkNode*呢?主要是本函数是返回一个指针,所以使用LinkNode*。那用LinkList的时候该怎么办?这里仅需要把LinkNode*改成LinkList即可,注意不是LinkList*。但是建议使用LinkNode*,以后涉及的操作主要是删除等,所以最好返回节点而不是节点的地址。

 

4.C++部分知识介绍

(1)首先对比C语言与C++动态存储分配与释放命令

C语言

C++

动态分配

(DataType*)malloc(sizeof(DataType)); //简单变量

(DataType*)malloc(sizeof(DataType)*Size); //数组

new DataType; //简单变量

new DataType[Size]; //数组

动态释放

free(p);

delete p; //简单变量

delete [] p; //数组

(2)报错函数

 #include <stdlib.h>
 #include <iostream.h>

 void Error(char *message){
5  cerr<<”Error:”<<message<<endl;
);
 }

(3)C++引用

  这里的引用仅需要理解为重命名,但是只要发生在被调函数中,举个栗子:

  void initList(SeqList &L){

  };

  这里的&L可以理解为重命名,其中把传入的参数不管是什么如何用L统一表示。注意C中是没有这种用法的,所以说基于C语言但是用C++的环境跑代码。

5.时间复杂度度量

 void example(float x[][m],int m){
     float  sum[m];
     int i;
     int j;
     ;i<m;i++){
         sum[i]=0.0;
         ;j<m;j++)
             sum[i]=sum[i]+x[i][j];
     }
     ;i<m;i++)
         count<<"Line"<<i<<":"<<sum[i]<<endl;
 }

  这里可以看出,float sum[m];     int i;      int j;与其他操作不同,该表自己详细研究一下,可以得出结论。

  一般情况用大O表示时间复杂度。

  基本做法就是T(n)<=O(f(n))也可以根据循环大体推算出最后结果。

 void example(float a[],int& n){
     int i;
     int j;
     ;
     ;i<n;i++)
         ;j<n;j++)
             if(a[i]==a[j])
                 a[j]=delTag;
     ;i<n;i++)
         if(a[i]!=delTag){
             if(i!=k)
                 a[k]=a[i];
             k++;
         }
 }

  这里的O(n2)当出现两个的O(n)时取最大值T(n)=O(max{f(n),g(n)})=O(n2)

  算法时间复杂度排序:

    c<log2n<n<nlog2n<n2<n3<2n<3n<n!

  其中c,log2n,n,nlog2n都不错,n2,n3还可接受,2n,3n,n!就不能算是好的算法了。

   转载请注明出处,O(∩_∩)O谢谢!

Lecture 0 --基本说明的更多相关文章

  1. [C2P3] Andrew Ng - Machine Learning

    ##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...

  2. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  3. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  4. 微信小程序省市区选择器对接数据库

    前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...

  5. osg编译日志

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...

  6. one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle 分类: hdoj 2015-07-19 16:49 86人阅读 评论(0) 收藏

    one recursive approach to solve hdu 1016, list all permutations, solve N-Queens puzzle. reference: t ...

  7. hdu 1159, LCS, dynamic programming, recursive backtrack vs iterative backtrack vs incremental, C++ 分类: hdoj 2015-07-10 04:14 112人阅读 评论(0) 收藏

    thanks prof. Abhiram Ranade for his vedio on Longest Common Subsequence 's back track search view in ...

  8. note of introduction of Algorithms(Lecture 3 - Part1)

    Lecture 3(part 1) Divide and conquer 1. the general paradim of algrithm as bellow: 1. divide the pro ...

  9. MIT 6.828 JOS学习笔记0. 写在前面的话

    0. 简介 操作系统是计算机科学中十分重要的一门基础学科,是一名计算机专业毕业生必须要具备的基础知识.但是在学习这门课时,如果仅仅把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着深 ...

随机推荐

  1. xammp 配置虚拟主机

    ## This is the main Apache HTTP server configuration file. It contains the# configuration directives ...

  2. Ajax 跨域难题 - 原生 JS 和 jQuery 的实现对比

    讲解顺序: AJAX 的概念及由来 JS 和 jQuery 中的 ajax 浏览器机制 AJAX 跨域 AJAX 的概念 在讲解 AJAX 的概念之前,我先提一个问题. 这是一个典型的 B/S 模式. ...

  3. jsp页面设置绝对路径

    例子: 设置完之后就随便jsp页面放在哪个文件夹都可以加载到资源了 <%@ page language="java" contentType="text/html; ...

  4. 车牌识别--OMAP4430处理器上測试

    OMAP4430(ME865) arm-linux-gcc 4.5.1(FriendlyARM) 软浮点执行结果: root@lj:/workspace/carid# arm-linux-gcc ca ...

  5. 后端程序员看前端想死(二)进入页面之后js分析

    在上一篇中分析了一下以网页的组成.header中引入的乱七八糟的东西,现在进入到js中进行分析了 tuhooo啊,你是要搞前端了么? nonono,好玩,学一下 打开页面之后执行js的几种方法 直接写 ...

  6. GreenPlum 安装方法详解

    一.安装环境准备 1.磁盘环境准备 磁盘分区典型配置如下: 文件系统 文件格式    大小  /        ext3   50GB,Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为 ...

  7. RYU改动监听port Mininet在custom自建拓扑和连接到指定控制器命令解释

    1.RYU控制器改动监听port 在ryu/ryu/ofproto以下的ofproto_common.py watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc ...

  8. Cocos2d-x之LayerMultiplex的使用

    1.用处 用于管理Layer的切换,而不用切换场景. 2.代码 1).h文件 #include "cocos2d.h" #include "ui/CocosGUI.h&q ...

  9. 基于EasyDarwin实现幼儿园监控类项目

    移动互联网越来越普及,幼儿园监控类的项目也越来越多,如何能够以最低的成本.最快的速度搭建一套幼儿园监控类的平台成了许多开发者的需求,那么我们今天就来简单探讨一下如何基于EasyDarwin实现一套幼儿 ...

  10. openjdk源码目录结构

    1 openjdk源码 http://hg.openjdk.java.net 选择jdk8u这个project, 然后选择jdk8u20这个repository. 2 目录结构 corba: comm ...