相比前些天的内容,今天的内容算是比较简单的。主要说了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 }