第十九天:vt控制码及数据结构

  相比前些天的内容,今天的内容算是比较简单的。主要说了VT控制 码,三种排序算法:选择排序,冒泡排序,快速排序。二分查找。遍历二叉树还有posix的简单介绍。系统调用函数:open  close read write lseek fstat的使用。

   关于vt控制码的学习,据老刘说是为了以后的小项目准备的。比如贪吃蛇,俄罗斯方块。目前只要知道基本的操作就行了。主要是对光标的控制。所有的VT100控制符是 /033打头(即ESC的ASCII码)用输出字符语句来输出。具体格式有两种 一种数字形式, /033[<数字>m .如 /33[40m ,表示让后面字符输出用背景黑色输出 /33[0m表示取消前面的设置。其中前景(字符颜色)/背景颜色需要同时输出。  另一种是控制字符形式。即最后一个字符不是m,而是控制字符。/033[K 清除从光标到行尾的内容  /033[nC 光标右移n行。

  选择排序和冒泡排序就不提了,这两种排序都写烂了。着重讲快速排序。先普及时间复杂度和空间复杂度的概念。时间复杂度是度量算法执行的时间长短空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。

   快速排序是利用了递归的思想,用一个轴将要排序的内容分成两份。比这个轴大的放在一边,小的放在另一边。再在两边放轴。具体代码如下

 1 #include<stdio.h>
 2
 3 void quick(int *,int ,int );
 4 int main()
 5 {
 6     int arr[8]={3,4,5,2,6,2,9,5};
 7
 8     quick(arr,0,7);
 9
10     int i = 0;
11     for(i=0;i<8;i++)
12         printf("%d\n",arr[i]);
13
14 }
15 void quick(int *arr,int low,int high){
16     int i,j,pivot;
17     if(low >high)
18         return ;
19     pivot = arr[low];
20     i = low;
21     j = high;
22     while(i < j){
23         while(i<j && arr[j]>pivot)
24             j--;
25         if(i < j)
26             arr[i++] =arr[j];
27         while(i<j && arr[i]<=pivot)
28             i++;
29         if(i < j)
30             arr[j--] =arr[i];
31     }
32
33     arr[i] = pivot;
34     quick(arr,low,i-1);
35     quick(arr,i+1,high);
36
37 }

二分查找和遍历二叉树老刘就简单给出代码。理解就行,我这就不记录了。主要是posix标准。关于系统调用的那几个函数。这个是我们接下来今天上课的核心。

    POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。

    由于前些天刚刚学过C的文件操作。而C的文件操作就是read ,write ,open ,close lseek这几个函数的封装。所以使用起来基本没有区别。调用系统的函数时,关键是要读懂数据手册上的内容。尤其是函数功能,参数,返回值。下面的代码是着几个函数的使用:

 1 #include<fcntl.h>
 2 #include<stdio.h>
 3 #include<sys/stat.h>
 4
 5 int main()
 6 {
 7     int fp = open("hello",O_RDWR | O_CREAT,0664);
 8     if(fp <0){
 9         perror("open");
10         return 1;
11     }
12     char *buf = "hello bunfly";
13     int ha = write(fp,buf,12);
14     if(ha < 0){
15         perror("write");
16         return 1;
17     }
18     lseek(fp,0,SEEK_SET);
19
20     unsigned char data[1024] = {0};
21     int ret = read(fp,data,1024);
22     if(ret < 0){
23         perror("read");
24         return 1;
25     }
26     printf("data is %s\n",data);
27     struct stat st;
28      ret = fstat(fp,&st);
29     if(ret < 0){
30         perror("fstat");
31         return 1;
32     }
33     printf("len is %d\n",st.st_size);
34     close(fp);
35 }

 

   

时间: 2024-10-14 05:58:55

第十九天:vt控制码及数据结构的相关文章

javaSE第十九天

第十九天????227 1:异常(理解)????227 (1) 定义????227 a)异常的引入????227 (2)异常的体系????228 (3)异常的处理:????229 A:JVM的默认处理????229 B:自己处理????229 (4)异常知识点代码详解????229 a) 异常处理的方式????229 b) 多个异常的处理????230 c) JDK7异常处理的新方式????233 d) 编译时期异常和运行时期异常的区别????234 e) 异常中的方法详解????235 f)

struts2官方 中文教程 系列十二:控制标签

介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项目:struts_basic2 本帖地址:struts2官方 中文教程 系列十二:控制标签 即 http://www.cnblogs.com/linghaoxinpian/p/6941683.html 下载本章节代码 struts2 if标签 我们在thankyou.jsp中添加如下代码: <s:i

C#编程总结(十)字符转码

C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输.展现以及其他操作等. 看看下面的转码,就知道他的用处了. 1.字符串转码 根据原编码格式与目标编码格式,完成转换.不过可能出现乱码哦.上一章已经介绍过了. 代码: /// <summary> /// 字符串编码转换 /// </summary> /// <param name="srcEncoding">原编码</param> /// <param

第二十九天 月出惊山鸟 —Spring的AOP_AspectJ @annotation

6月14日,阴转雨."四面垂杨十里荷,向云何处最花多, 画楼南畔夕阳和.天气乍凉人寂寞, 光阴须得酒消磨,且来花里听笙歌." 面向切面的框架AspectJ邂逅Spring,不仅造就一种简洁,更带来更多的选择空间. 上篇的切面与代理配置方式,麻烦且繁琐.好在Spring 与 AspectJ 进行了集成,从接口和配置的泥潭爬出,善莫大焉. 下面把上一篇Spring的AOP 的例子改写一下,达到同样的效果. 1-3步骤不变. 4.定义一个 Aspect 切面类BallHandler.java

C语言与VT100控制码编程

C语言与VT100控制码编程 声明: 1. 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; 2. 本文在vim中编辑,请尽量是用vim进行阅读,因为有不对齐的现象; 3. 本人强烈建议您先编译,运行本文最后提供的sinDemo源代码,再看本文的正文,因为您看了运行效果,您就知道本人为什么要写这篇文章; \\\\\\\\\\\\--*目录*--/////////// | 一. 需求背景 | | 二. VT100控制码是什么 | |

十五.jQuery源码解析之Sizzle总体结构.htm

Sizzle是一款纯javascript实现的css选择器引擎,它具有完全独立,无库依赖;小;易于扩展和兼容性好等特点. W3C Selectors API规范定义了方法querySelector()和querySelectorAll(),但是IE6,7不支持这两个方法. 在Sizzele内部,如果浏览器支持方法querySelectorAll(),则调用该方法查找元素,如果不支持,则模拟该方法的行为. Sizzle支持几乎所有的css3选择器,并且会按照文档位置返回结果. 上面截取的只是Siz

十六.jQuery源码解析之Sizzle设计思路.htm

为了便于后面的叙述,需要了解一些相关术语和约定. 并列选择器表达式:"div,p,a"====>div,p,a是并列的. 块表达式:"div>p"中的div和p就是两个块. 块表达式的类型:共8种.id,class,name,attr,tag,child,pos,pseudo(伪类表达式) 块间的关系符:共4种.">":父子关系,"+":紧挨着的兄弟关系,"~":后面的所有兄弟关系,&qu

十二.jQuery源码解析之.eq().first().last().slice()

eq(index):将集合中的索引为index的元素提取出来. first():返回集合中的第一个元素. .last():防护集合中的最后一个元素. .slice(start[,end]):返回集合中的给定区间段的元素. first()和last()调用eq(),eq()通过slice()实现,slice()通过 .pushStack()实现. 相关源码 285行:用法很奇特,通过一个"+"把可能为字符串的i转换成一个数值. 300~301:先借用数组方法slice()从当前jQuer

第三十九天 一乐在其中—Android的小游戏打飞机(三)飞机打子弹

8月7日,小雨."乳鸦啼散玉屏空,一枕新凉一扇风.睡起秋色无觅处,满阶梧桐月明中." 上篇已经让飞机随手指自由移动,本篇加载子弹和音效及背景音乐. 本篇要用到的几个函数讲解: 一.cocos2d的音效.背景音乐函数如下: 1.SoundEngine.sharedEngine().playSound(Context ctxt, int resId, boolean loop) 用于播放背景音乐. 2.SoundEngine.sharedEngine().playEffect(Contex