C语言基础
YiZhe0731
新手,菜鸟,弱鸡。
展开
-
新手上路系列2:表达式与流程控制
一些简单的有关数据类型,运算符与表达式以及基本程序结构(主要是循环结构)的小知识点的整理。望多交流,多指正。原创 2017-07-12 18:38:02 · 272 阅读 · 0 评论 -
干货4:链式栈
链式栈的代码实现原创 2017-08-04 17:43:40 · 184 阅读 · 0 评论 -
干货5:顺序队列
顺序队的代码实现原创 2017-08-04 17:51:24 · 156 阅读 · 0 评论 -
干货6:链式队
链式队列的代码实现原创 2017-08-04 17:57:20 · 204 阅读 · 0 评论 -
称不上项目的小程序1:通讯录
这是之前刚接触结构体的时候写的一个小程序,而且也是第一次写一个篇幅这么长的程序,很多地方都想得不是很完善,比如main函数中的很多语句完全可以放在.c 函数中去实现,还有main中的整体结构框架可以用switch case 语句来实现,这样程序就不会显得像现在这样臃肿。不过,作为第一次完成的“作品”,至少添加,列举,搜索,删除(包括同名好友的删除)等基本操作还是可以一一实现。至于好友ID号的问题,边上一些觉得应该是用户自己输入,但这样总觉得哪里怪怪的(虽然我也自己动手实现了一下那样的功能),所以还是坚持自己原创 2017-08-05 10:23:33 · 273 阅读 · 0 评论 -
称不上项目的小程序2:停车场
本停车场只有10个车位,只有1个大门,车停满了只能在候车便道等着,有车走了再能继续进入。另外,停车场中的车要离开时,由于通道窄,在它后面的车要先退出来,等它走后再依次进入(我不管,我的停车场就是这么傲娇,我宁愿请工人来帮车主开进开出的让道也不要花点钱扩大的通道)。原创 2017-08-05 10:45:06 · 521 阅读 · 0 评论 -
称不上项目的小程序3:计算器
这是用2个栈实现一个小计算器功能,包含的运算符有:+ , - , * , / , ( , ) ,可谓“功能强大”!原创 2017-08-05 11:02:35 · 245 阅读 · 0 评论 -
干货7:树
树的代码实现原创 2017-08-05 11:44:22 · 216 阅读 · 0 评论 -
干货8:二叉树
二叉树的代码实现原创 2017-08-05 11:44:44 · 208 阅读 · 0 评论 -
排序:冒泡与选择的改进
之前写过冒泡与选择排序,但程序稍显稚嫩,现在来回顾顺便改进一下这两种简单的排序:(之后用到的交换和打印函数都是这边的,不再敲出来了)原创 2017-08-05 11:45:00 · 362 阅读 · 0 评论 -
排序:插入排序以及其改进:二分法插入
插入排序可以理解我们打牌时,摸一张牌按顺序插入一张。原创 2017-08-05 11:45:54 · 301 阅读 · 0 评论 -
排序:希尔排序
介绍了2种希尔排序的实现方式。原创 2017-08-05 11:46:16 · 171 阅读 · 0 评论 -
排序:堆排序
堆排序的代码实现原创 2017-08-05 11:46:30 · 170 阅读 · 0 评论 -
排序:归并
归并排序的代码实现原创 2017-08-05 11:46:54 · 186 阅读 · 0 评论 -
排序:快速排序
快速排序的代码实现原创 2017-08-06 09:05:00 · 197 阅读 · 0 评论 -
琐记9:利用标准i/o实现文件间的运算
之前看到了这样一道题目:手动创建两个文本文件 text1.txt,text2.txt,要求编程创建 text3.txt,实现 text1.txt 和 text2.txt 文件中除去首行和末尾对应的数据相加。题目中的首行和末尾分别是单词 begin 和 end, 但它给的数据是这样的:text1:10 11 12 ,20 21 22 , 30 31 32 ;text2:15 16 17 , 25原创 2017-08-11 10:08:12 · 300 阅读 · 0 评论 -
新手上路系列7:系统调用函数与标准i/o实现文件的复制
系统调用函数与标准i/o实现文件的复制,以及关于文件权限mode的一些小细节。原创 2017-08-07 08:54:50 · 656 阅读 · 0 评论 -
新手上路系列9:进程间通信
1、两个程序之间传递数据的一种简单方法是使用popen与pclose。FILE *popen(const char *command, const char *type); popen函数允许一个程序将另一个程序作为新进程来启动,并可以传递数据给它或者通过它接收数据。command 字符串是要运行的程序名和相应的参数。type必须是"r"或"w"。"r"调用函数可以利用FILE*指针来读取原创 2017-08-14 15:23:10 · 239 阅读 · 0 评论 -
干货3:顺序栈
顺序栈的代码实现原创 2017-08-04 17:42:55 · 169 阅读 · 0 评论 -
干货2:头指针链表
头指针链表的实现原创 2017-08-04 17:42:02 · 193 阅读 · 0 评论 -
新手上路系列3:数组及部分常用程序
感觉现在的博客并没有什么实质性的意义,只是总结一些之前的学到的知识,做下的笔记。比如今天,就是来记下之前学习到的数组的一些概念,就当作复习吧。原创 2017-07-17 15:35:38 · 232 阅读 · 0 评论 -
新手上路系列4:复合数据类型
复合数据类型原创 2017-07-20 19:11:28 · 229 阅读 · 0 评论 -
通讯录程序的改进——文件备份
根据最近学习的文件的读写将之前的通讯录进行了一些改进,在程序开始之前加上了一个读入函数,程序末尾加上了一个写出函数。这样,在程序结束的时候,通讯录中的数据将会以文件的形式保存下来,下次再进入程序时,从文件中读取数据就能达到文件备份的效果了。原创 2017-08-08 15:59:53 · 342 阅读 · 0 评论 -
新手上路系列11:多线程编程
1、基本概念:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属于一个进程的其他的线程共享进程拥有的全部资源。在Linux 中有着成熟的库函数,需要使用pthread.h头文件,而且编译时需要加上 -lpthread。2、线程的操原创 2017-08-15 21:00:16 · 196 阅读 · 0 评论 -
琐记7:关于fork()函数的一些小知识
首先,fork() 函数的主要功能通俗的说是创建一个子进程。这2个进程是相互独立的两个进制,它们共享的内容只有代码段。这时候就要提到我们之前学到 的一个知识点——内存四区了,在栈,堆,数据段和代码段这四个大块中,它们父子俩的前三个是完全区分开的原创 2017-08-10 10:14:25 · 248 阅读 · 0 评论 -
新手上路系列11:网络编程基础知识与服务器搭建
1、TCP / IP 理论基础1) 对于网络理论介绍一般采用OSI七层网络模型,但linux 中网络栈的介绍一般分为四层的Internet模型,分别是:应用层、传输层、网际层、网络接口。其中需要提的是传输层。它对应的网络协议有TCP与UDP。传输控制协议(TCP)的可靠性与准确性强,由于它 的“三次握手”传输速度就相对较慢。而用户数据报文协议(UDP)是一种不可靠的非连接型传输方式。但原创 2017-08-17 10:40:25 · 392 阅读 · 0 评论 -
新手上路系列8:进程控制的相关知识
1、首先,进程的即是指程序执行的实例,它是运行中的程序。进程的状态包括三种:执行、就绪和阻塞状态。执行状态的进程占用着CPU,而就绪状态的进程则是在等待分配CPU,最后的阻塞状态就是更低一级的状态,它等待着进入就绪状态。进程和文件类似,每一个打开的进程都有它自己的ID(PID),可以使用ps 命令来查看它的ID,常用的有 “ps -ef”命令。当然一次显示的进程太多你也可以通过管道抓取一部原创 2017-08-10 10:20:05 · 243 阅读 · 0 评论 -
琐记6:随机分组
将40个数按4个一组随机分成10组打印出来: 实现的方法应该有很多,这里就介绍一种利用数组元素的交换来实现的方法。可以利用一个随机函数获取一个40以内的随机数作为下标,将它的值与末尾值交换,再获取一个39以内的随机数,再将它的值与倒数第二个数交换,依次交换后就可以得到一个随机数组了。原创 2017-08-06 20:21:15 · 475 阅读 · 0 评论 -
琐记2: ++i 的打印顺序问题
关于++i与i++的打印顺序问题。原创 2017-08-03 20:59:51 · 315 阅读 · 0 评论 -
琐记1:字符串常量与数组的部分区别
一些平时学习的琐碎的小细节,有些还是值得看看的,当然,这个系列以后还会继续的。原创 2017-08-02 21:46:52 · 227 阅读 · 0 评论 -
琐记3: 全局变量与局部变量问题
静态全局变量与静态局部变量都只能被定义一次在函数内部,优先使用静态局部变量静态全局变量的默认初始值为0原创 2017-08-03 21:33:55 · 232 阅读 · 0 评论 -
琐记4:判断回文
编写一个能判断一字符串是否为回文的程序,回文即:"asdfghjhgfdsa"这样的字符串:int fun(char *p){ if (p == NULL) return -1; char *pstart = p; char *pend = p; while (*pend) { pend++; } pend--; while (pstart < pend)原创 2017-08-03 21:56:09 · 287 阅读 · 0 评论 -
琐记5:进制转换的程序实现
二进制与十六进制的程序实现。原创 2017-08-03 22:06:12 · 241 阅读 · 0 评论 -
新手上路系列5:部分字符串使用函数的程序实现
1、strcpy:字符串拷贝函数(用处相当于字符串间的赋值函数)这边的例子都使用了“hello ”和“world!”这两个字符串,而且为了防止越界问题,字符串1都设置成了比较大的字符串。int main(){ char str1[100] = "hello "; char str2[] = "world!"; char *p1 = str1; char *p2 =原创 2017-08-03 22:20:05 · 251 阅读 · 0 评论 -
新手上路系列6:内存错误
在结构体的使用中,常常出现内存使用不当导致的各种内存问题,struct A{ int a; char *name;};接下来要列出来的一些常见的内存错误都基于上面这样一个简单的结构体类型1、int main(){ struct A a;// = {9, "hello"}; //printf ("id = %d, name = %s\n", a.a, a.name);原创 2017-08-03 22:32:12 · 193 阅读 · 0 评论 -
干货1:头结点链表
#include "LinkList.h"#include #include Node * Create_List(){ Node *list = (Node*)malloc(sizeof(Node)/sizeof(char)); if (list == NULL) return NULL; list->next = NULL; // 空表 return list;原创 2017-08-03 22:46:47 · 158 阅读 · 0 评论 -
琐记8:恐怖的僵尸进程与温暖的守护进程
1、被我标题吸引进来的同学先不要着急,在讨论标题中的内容之前,我们需要先了解下进程的终止:exit 与_exit 函数都是用来结束进程的函数,首先是exit:它的头文件: ,其次它用来正常结束当前进程,并把参数status返回给父进程,而进程所有的缓冲区数据也会自动写回并关闭未关闭的文件。而_exit 函数的头文件为:,该函数会在结束进程时清空缓冲区。2、僵尸进程:当一个进程的子进原创 2017-08-10 14:31:23 · 270 阅读 · 0 评论 -
新手上路系列10:信号量与信号通信
1、信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P)和发送(即V)信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。信号量的出现,主要是由于需要一种这样一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来协调进程对共享资源的访问。由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv原创 2017-08-14 17:01:02 · 396 阅读 · 0 评论