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