经典c
老夫运维全靠一把梭
放飞梦想,放飞自我。
展开
-
常见的排序方式之二:选择排序
选择排序。原创 2017-07-11 17:00:32 · 246 阅读 · 0 评论 -
进程通信—卖票系统的实现
#include <stdio.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <string.h>#include <time.h>typedef struct _shm{ int flag; int ticket;}SHM;void sellTicket(SHM* ps原创 2017-08-14 18:28:23 · 427 阅读 · 1 评论 -
栈和队列的区别
首先,栈和队列都是线性表的重要家族成员,栈(stack)是一种只在表尾进行插入或删除的线性表,又称作后进先出(LIFO)的线性表;队列则相反,它是一种先进先出的线性表,即只允许一端进行插入,一端进行删除,有点类似超市里的排队。栈的一些基本代码思想: 基本操作: InitStack(&S) 操作结果:构造一个空栈S。 Destroy原创 2017-08-07 10:10:52 · 1838 阅读 · 0 评论 -
班级40位同学,随机分配4人一组。
#include <stdio.h>#include <time.h>//交换函数void swap (int *a, int i, int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}//打印函数void printA (int *a, int len){ int i; for (i =原创 2017-08-07 09:51:05 · 3260 阅读 · 1 评论 -
排序之三:插入排序
基本思想:当插入第i (i ≥ 1)个对象时, 前面的V[0], V[1], …, V[i-1]已经排好序。这时,用V[i]的排序码与V[i-1], V[i-2], …的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的对象向后顺移。 void swap (int a[],int i,int j) { int tmp = a[i]; a[i原创 2017-08-06 20:58:22 · 164 阅读 · 0 评论 -
排序之四:二分插入
基本思想:因为 R[1..i-1] 是一个按关键字有序排列的有序序列,因此可以利用折半查找实现“在R[1..i-1]中查找R[i]的插入位置”,由此实现的插入排序称为二分插入排序。void swap (int a[],int i,int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; }void printA (int *a,int len)原创 2017-08-06 20:54:46 · 177 阅读 · 0 评论 -
排序之五:希尔排序(高效)
基本思想:设待排序对象序列有 n 个对象,首先取一个整数 gap < n 作为间隔,将全部对象分为 gap 个子序列,所有距离为 gap 的对象放在同一个子序列中,在每一个子序列中分别施行直接插入排序。然后缩小间隔 gap,例如取 gap = 【gap/2】,重复上述的子序列划分和排序工作。直到最后取 gap == 1, 将所有对象放在同一个序列中排序为止。void swap (int a[],in原创 2017-08-06 20:51:50 · 221 阅读 · 0 评论 -
其他三种排序:堆排序,归并排序,快速排序
//交换函数 void swap (int a[],int i,int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; }//打印函数 void printA (int *a,int len) { int i; for (i = 0; i < len; i++) { p原创 2017-08-06 20:48:10 · 300 阅读 · 0 评论 -
排序之三:插入排序
#include void swap (int a[],int i,int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}void printA (int *a,int len){ int i; for (i = 0; i < len; i++) { printf ("%-4d",a[i]); } printf ("\原创 2017-08-06 18:58:55 · 184 阅读 · 0 评论 -
文件系统编程—系统调用与标准IO
首先需要明白的是,所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。 在Linux中,为了更好地保护内核空间,程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数原创 2017-08-08 20:35:38 · 338 阅读 · 0 评论 -
C语言项目——通讯录
那个,我为了添加娱乐效果,在程序中加入了一些哲学♂,大家复制的时候记得改一下printf里的内容即可首先是头文件#ifndef _TEST_H__#define _TEST_H__#define FALSE 0#define TRUE 1typedef struct friend //朋友相关信息的结构体{ int ID; char name[20]原创 2017-08-07 20:35:47 · 655 阅读 · 0 评论 -
编写函数实现strcat(),strcmp()以及strcpy()的功能
#include #include //实现stract的功能:把str2的字符串放到str1的后面。int main(){ char str1[100]; char str2[10]; gets(str1); gets(str2); char *p1 = str1; char *p2 = str2; int k =strlen(str1); p1 = p原创 2017-07-17 19:15:16 · 4614 阅读 · 1 评论 -
十进制转换为十六进制
#include #define BASE 16void tran(int n){ if (n == 0) return; tran(n/BASE); if (n%BASE > 9)//每一次循环后定义比9大的余数 printf ("%c",n%BASE - 10 + 'A'); else //否则继续循环输出 printf ("%d",n原创 2017-07-20 20:47:57 · 346 阅读 · 0 评论 -
今天学习的时候偶然发现了一个有趣的题目,可以用编程实现。
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手(在中国,警察:都TM别废话,都和我去局里一趟,破案要紧!手动滑稽)#include int main(){ char kill原创 2017-07-12 20:11:37 · 386 阅读 · 0 评论 -
经典的报数退出问题,以前叫猴子选大王。n个人排成一圈报数,报到3的退出,循环直至最后一个,问,最后一个的原来号码是多少。
#includevoid main(){int i,k,m,n,num[50],*p;printf("input number of person: n=");scanf("%d",&n);p=num;for(i=0;i*(p+i)=i+1;i=0;k=0;m=0;while(m{if(*(p+i)!=0)//判断这个号(原来的序号)是否出局原创 2017-07-11 11:22:12 · 862 阅读 · 0 评论 -
常见的排序之一:冒泡排序
两种排序方式之一:冒泡排序。原创 2017-07-11 16:49:55 · 230 阅读 · 0 评论 -
Linux下C语言项目—聊天室的搭建1.0
之所以为1.0,是因为虽然能运行,但有些地方的边际条件并没有得到补充,很容易产生错误,先上代码吧。 一个在 Linux 下可以使用的聊天软件,要求至少实现如下功能: 1. 采用 Client/Server 架构 2. Client A 登陆聊天服务器前,需要注册自己的 ID 和密码 3. 注册成功后,Client A 就可以通过自己的 ID 和密码登陆聊天服务器 4. 多原创 2017-08-30 13:54:53 · 4395 阅读 · 13 评论