首页 > 代码库 > 第十九天:vt控制码及数据结构
第十九天: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 }
第十九天:vt控制码及数据结构