以冒泡排序为例--malloc/free 重定向stdin stdout
参考
C语言冒泡排序算法及代码 有详细解释
《数据结构》 陈越 等编著
esort.c 代码如下,可关注下mallloc/free,freopen重定向的用法,排序为每轮将最小的数放在前面:
#include<stdio.h>
#include<malloc.h> #define N 100 int datin(int *p);
void printout(int *p,int len);
void esort(int *p,int len); int main(void)
{
int len=;
int *a,*ptrinit;
a = (int *)malloc(sizeof(int)*N);
ptrinit = a;
if(a == NULL)
{
printf("a malloc err!\n");
return -;
}
len = datin(a);
printf("\n input data len = %d:\n",len);
printf("\n input data :\n");
printout(a,len);
esort(a,len);
printf("\n esort data :\n");
printout(a,len); free(a);
printf("\n--exit--\n");
return ;
} void esort(int *p,int len)
{
int i=,j=;
int temp = ;
for(i=; i<len; i++)
for(j=; j<len-i-; j++)
{
if(p[j] > p[j+])
{
temp = p[j+];
p[j+] = p[j];
p[j] = temp;
}
}
} int datin(int *p)
{
int len = ;
freopen("data.txt","r",stdin); //data input
while(scanf("%d",p)!=EOF)
{
len++;
p++;
}
fclose(stdin);
return len;
} void printout(int *p,int len)
{
int i=;
while(i<len)
{
printf("%d\t",*p);
p++;
i++;
}
}
int datin(int *p)
{
int len = ;
freopen("data.txt","r",stdin); //data input
while(scanf("%d",p)!=EOF)
{
len++;
p++;
}
fclose(stdin);
return len;
}
1)在输入和输出数据的函数中,指针做形参时,在函数中是不会修改指针的地址的,只能修改指针所指向的内容,即 *p。
2)结合栈(stack)的理解,函数传递的参数和临时变量都是保存在 栈里面的,在函数退出时,栈里面的内容会被释放掉。
3)所以,指针的地址是不会被改变的,就算是 在函数中做了p++的操作。通过scanf改变了 (*p)的数值
Makefile
CC := gcc all:esort_min esort_max esort_min: esort_min.o
$(CC) $^ -o $@ esort_min.o: esort_min.c
$(CC) -c $^ esort_max: esort_max.o
$(CC) $^ -o $@ esort_max.o: esort_max.c
$(CC) -c $^ clean:
rm -f *.o esort_min esort_max
执行情况:
hy@ubuntu:~/ccc/pjesort$ ./esort_min input data len = : input data : esort data : --exit--
hy@ubuntu:~/ccc/pjesort$ ./esort_max input data len = : input data : esort data : --exit--
hy@ubuntu:~/ccc/pjesort$
冒泡排序改进算法
// coding by microhy
//
#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
//#include <ctype.h>
#define MAXLEN (100) int data_input(int *a)
{
int *ptri=a;
int cnt = ;
if(ptri==NULL)
{
return -;
}
while(scanf("%d",ptri)!=EOF)
{
ptri++;
cnt++;
}
return cnt;
} void data_output(int *a,int N)
{
int i=;
while(i<N)
{
printf("%d\t",*a);
i++;
a++;
}
printf("\n");
} void BuddleSort(int *a,int N)
{
int i,j,temp;
int flag=;
for(i=; i<N; i++)
{
flag=;
for(j=; j<N-i-; j++)
{
if(a[j] > a[j+])
{
temp = a[j+];
a[j+] = a[j];
a[j] = temp;
flag = ;
}
}
if(!flag)
break;
}
} int main()
{
int dat_len=;
int *datArry=NULL; datArry = (int *)malloc(sizeof(int)*MAXLEN);
if(datArry==NULL)
{
printf("[err]NULL, Pls Check datArry malloc\n");
return -;
}
#if 1 // !!
freopen("in.txt","r",stdin);
printf("\t!!! < Pls freopen off > !!!\n");
//freopen("out.txt","w",stdout);
#endif // dat_len = data_input(datArry);
if(dat_len&&dat_len<=MAXLEN)
{
data_output(datArry,dat_len);
BuddleSort(datArry,dat_len);
data_output(datArry,dat_len);
}
free(datArry); // !!!
return ;
}
代码链接:
http://pan.baidu.com/s/1pLM0ILH
http://pan.baidu.com/s/1slHkUAD
以冒泡排序为例--malloc/free 重定向stdin stdout的更多相关文章
- 重定向stdin stdout stderr |
在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据 流,也就是题目中所提到的这三个.那么什么是数据流呢(stream)? 我们知道,一个程序要运行,需要有输入.输出,如果出错, ...
- WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
WorkerMan中work.php中 resetStd 方法中代码如下 public static function resetStd() { if (!static::$daemonize || ...
- stdin stdout stderr 标准I/O流
Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...
- shell基础知识之 stdin,stdout,stderr和文件描述符
stdin,stdout,stderr stdin=0 stdout=1 stderr=2 使用tee来传递内容,把stdout 作为stdin 传到下个命令 root@172-18-21-195:/ ...
- stdin stdout stderr - 标准 I/O 流
Fd #include <stdio.h> Fd extern FILE *stdin; Fd extern FILE *stdout; Fd extern FILE *stderr; D ...
- vbs脚本要求在cmd中输入输出用StdIn ,StdOut
Dim StdIn, StdOutSet StdIn = WScript.StdInSet StdOut = WScript.StdOut Do While Not StdIn.AtEndOfStre ...
- Linux学习笔记 -- stdin/stdout 重定向
输入/输出重定向 Linux系统通常从一个叫标准输入的地方读取输入并且将一个命令的结果以写入到标准输出反馈给我们:默认情况下,这也是我们使用的终端(命令行).如果我们想改变输入和输出的方式,就需要使用 ...
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
由open返回的文件描述符一定是该进程尚未使用的最小描述符.由于程序启动时自动打开文件描述符0.1.2,因此第一次调用open打开文件通常会返回描述符3,再调用open就会返回4.可以利用这一点在标准 ...
随机推荐
- MySQL 一致性读 深入研究
一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innod ...
- Oracle学习笔记一 初识Oracle
数据库简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.SQL 是 Structured Query Language(结构化查询语言)的首字母缩写词. 定义 数据库,简单来 ...
- [转载]跨域iframe高度自适应
场景: 经常会有这样的需求,跟外部合作伙伴合作,要嵌入别人的页面,这时候就需要高度自适应了,在这种跨域的情况下如何解决呢? 解决: 在iframe(合作伙伴的页面,称为P页面)中创建一个隐藏的ifra ...
- java中的SPI机制
1 SPI机制简介 SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里 ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- php 7.0 新特性
php 7 主题是性能优化 SEO 之前版本:开发效率快,语言本身性能差 普通的php网站:IO密集型,瓶颈在mysql上,体现不出来php的性能劣势,在密集计算方面比C,C++,JAVA差几十倍甚 ...
- C#终于支持可选参数了!
今天偶然看了一下C#4.0的新特性, 第一个新特性就令我兴奋不已, 曾经一度令我使用C#很不习惯的"死参数"问题终于搞定了.实在太爽了! 过去用C++, VB.NET的时候都很爽, ...
- 解读ASP.NET 5 & MVC6系列(8):Session与Caching
在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模 ...
- JAVA的反射理解
1----------------------------反射的概念----------------------------------------------- JAVA的反射机制是在运行状态中,对 ...