自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 网络编程项目:linux下基于C/S架构的聊天室

一、项目要求: 1. 采用 Client/Server 架构  2. Client A 登陆聊天服务器前,需要注册自己的 ID 和密码  3. 注册成功后,Client A 就可以通过自己的 ID 和密码登陆聊天服务器  4. 多个 Client X 可以同时登陆聊天服务器之后,与其他用户进行通讯聊天  5. Client A 成功登陆后可以查看当前聊天室内其他在线用户 Client x

2017-09-18 09:50:15 4976 5

原创 用栈和队列实现的停车场管理系统

停车场管理 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达 的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便 道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退 出,待它走后在依次进入。汽车离开时按停放时间收费。 基本功能要求: (1) 建立三个数据结构分别是:停放栈、让路栈、等候队列。 (2) 输入数据模拟管理过程

2017-08-05 14:18:33 5621 2

原创 Linux环境和Windows环境下一个表达式多项自增或自减运算结果的不同

今天通过测试发现在两种不同环境下表达式y = (++x) + (x++) + (++x)运算结果不同,例如: #include int main() { int   x = 8; int   y; y =  (++x) + (x++) + (++x); printf ("%d\n",y); } 以上程序在Linux环境下输出结果为28,而在Windows环境下输出为30.

2017-07-12 19:37:54 423

原创 C++面向对象的学习:写一个数组类

写一个数组类,实现相关函数,自定义构造函数能设置数组大小,获取数组长度,获取数组的元素, 完成数组的拷贝构造函数,允许两个数组对象互相赋值 #ifndef __MYARRAY_H__ #define __MYARRAY_H__ class Array { public: Array(int len) { m_len = len; m_arr = new int[len

2017-09-18 09:38:52 1339

原创 写一个函数,从一个字符串查找另一个字符串的位置

#include int find_where(char *str1, char *str2) { int count = 0; while(*str1) { if(*str1 == *str2) { char *str1tmp = str1; char *str2tmp = str2; while(*str2tmp) { if(*str2tmp !

2017-09-16 19:09:20 1224

原创 线程1打印A,线程2打印B,线程3打印C,依次打印10遍

#include #include #include #include int i=0, a=0, b=0, c=0; void* A() { while(i<10) { while(a!=0); while(i>=10); printf("A"); a=1; b=0; } } v

2017-09-16 19:05:42 1080

原创 数据库Sqlite基本的增删改查语句

SQLite将每个数据库都保存成一个文件。  数据库中的数据被组织成表的形式。  表由若干拥有相同字段的记录组成。  表可以为空,即拥有0条记录。  字段指的是记录中的数据域,它有不同的类型,可以是一个数值,也可以是字符串。  每个表中可以指定一个或多个字段为主键,表中所有记录的主键的值都不能重复。这种不重复是在插入记录时控制的,即如果向一个表中插入记录时,这个表中已有与插入记录具有相同

2017-09-01 09:20:55 1560

原创 Linux数据库编程Sqlite

新建一个学生数据库,在建一个学生数据表,进行增加和查找等操作。 #include #include // 数据库的头文件 int main() { sqlite3 * database; // 打开数据库 int ret = sqlite3_open("student.db", &database); if (ret != SQLITE_OK) {

2017-08-29 08:09:10 331

原创 链式队列的复习

#ifndef __LINKQUEUE_H__ #define __LINKQUEUE_H__ #include "error.h" #define TRUE 1 #define FALSE 0 typedef int QueueData; typedef struct _node { QueueData data; struct _node *next; }Node; typedef

2017-08-18 18:48:21 217

原创 基于TCP的服务器与客户端的搭建

#include #include #include #include #include #include #define PORT 9999 int main() { //1、创建socket int listen_socket = socket(AF_INET, SOCK_STREAM, 0); if (listen_socket == -1) { perro

2017-08-17 19:56:56 437

转载 TCP与UDP基本区别

 TCP UDP TCP与UDP基本区别   1.基于连接与无连接   2.TCP要求系统资源较多,UDP较少;    3.UDP程序结构较简单    4.流模式(TCP)与数据报模式(UDP);    5.TCP保证数据正确性,UDP可能丢包    6.TCP保证数据顺序,UDP不保证     UDP应用场景:   1.面向数据报方式   2.网络数据大多为短消息 

2017-08-17 19:37:50 256

原创 OSI七层网络模型和Linux四层概念模型

以下是每层对应的各种协议: 第七层:应用层 数据 用户接口,提供用户程序“接口”。 第六层:表示层 数据 数据的表现形式,特定功能的实现,如数据加密。 第五层:会话层 数据 允许不同机器上的用户之间建立会话关系,如WINDOWS 第四层:传输层 段 实现网络不同主机上用户进程之间的数据通信,可靠      与不可靠的传输,传输层的错误检测,流量控制等。 第

2017-08-17 19:23:06 505

原创 利用多线程和信号量,互斥量实现的经典的生产者与消费者模型

多线程并发应用程序有一个经典的模型,即生产者/消费者模型。系统中,产生消息的是生产者,处理消息的是消费者,消费者和生产者通过一个缓冲区进行消息传递。生产者产生消息后提交到缓冲区,然后通知消费者可以从中取出消息进行处理。消费者处理完信息后,通知生产者可以继续提供消息。 要实现这个模型,关键在于消费者和生产者这两个线程进行同步。也就是说:只有缓冲区中有消息时,消费者才能够提取消息;只有消息已被处理,

2017-08-17 19:11:08 993

原创 用线程和互斥锁实现的简单的卖票系统

#include #include #include #include #include int ticket = 100; // 票 // 互斥锁 pthread_mutex_t mutex; // 卖票线程 void *sale_ticket(void *v) { int window = (int)v; printf ("窗口 %d 开始卖票\n", windo

2017-08-15 19:22:57 1407

原创 用共享内存和信号量实现的简单的卖票系统

#ifndef __SEMAPHORE_H__ #define __SEMAPHORE_H__ #include #include #include union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SE

2017-08-14 20:48:45 406

原创 链式栈的复习

#ifndef __LINKSTACK_H___ #define __LINKSTACK_H___ #define TRUE 1 #define FALSE 0 #include "error.h" typedef int StackData; typedef struct _node { StackData data; struct _node *next; }Node; typ

2017-08-11 20:55:08 237

原创 守护进程的实现

#include #include #include #include #include #include int daemonize(int nochdir, int noclose) { // 1、创建子进程,关闭父进程 pid_t pid = fork(); if (pid > 0) { exit(0); } else if (pid < 0) { ret

2017-08-09 20:55:34 266

原创 用文件操作实现的通讯录

学习完文件操作这一部分之后就可以对之前做的通讯录进行修改,上一版本的通讯录可以参考我之前的一篇点击打开链接 通过文件操作可以实现将好友信息保存到一个文件中去,从而在下一次运行这个程序可以从这个文件中读取我之前修改或添加过的好友信息; 相比较上一版本,说简单点,就是我添加好友后退出通讯录后,下次再运行通讯录就能看到我之前添加进去的。 LinkList.h文件: #ifndef __L

2017-08-08 09:27:11 440

转载 用非递归的方式遍历二叉树

1、前序遍历的非递归实现     根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历,非递归的实现思路如下: 对于任一节点P, 1)输出节点P,然后将其入栈,再看P的左孩子是否为空; 2)若P的左孩子不为空,则置P的左孩子为当前节点,重复1)的操作; 3)若P的左孩子为空,则将栈顶节点出栈,但不输出,并将出栈节点的右孩子置

2017-08-07 09:04:52 902

原创 利用堆排序中的思想实现班级分组

假设班级有四十个人,现在要实现随机分组,四个人一组并打印出来 #include #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

2017-08-06 19:51:45 294

原创 顺序栈的基本操作

#ifndef __SQSTACK_H__ #define __SQSTACK_H__ #define FALSE  0 #define TRUE   1 #define SIZE  10 #include "error.h" typedef  int StackData; typedef struct _stack { StackData data[SI

2017-08-04 11:28:20 289

原创 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序

#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 { printf("%4d",a[i]); } printf("\n"); } int

2017-08-03 15:07:02 342

原创 顺序队列的基本操作

#ifndef __SQQUEUE_H__ #define __SQQUEUE_H__ #include "error.h" #define TRUE  1 #define FALSE 0 #define SIZE 10 typedef int QueueData; typedef struct _queue { QueueData data[SIZE]; in

2017-08-02 10:33:18 327

原创 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现

#ifndef __BTREE_H__ #define __BTREE_H__ #define BLEFT  0    // 表示插入二叉树的左边 #define BRIGHT 1    // 表示插入二叉树的右边 #define TRUE   1 #define FALSE  0 typedef char BTreeData; // 二叉树的结点 type

2017-08-01 19:27:01 567

原创 判断一字符串是否为回文,是返回1,不是返回0,出错返回-1

#include int fun(char *p) { if (p == NULL) return -1; char *pstart = p; char *pend   = p; while (*pend) { pend++; } pend--; while (pstart { if (*pstart != *pend) return 0;

2017-07-31 16:53:28 2601

原创 用链表实现的通讯录的功能

要求:制作一个电子通讯录,通过该通讯录能存入好友 ID 号、 姓名) (英文)、 手机号码、家庭住址、公司电话 模块 主界面:主要显示软件功能。 1. 添加好友信息。 2. 列表好友信息。(包含排序功能) 3. 搜索好友 4. 删除好友   添加好友: 用户输入 1后,让用户输入好友信息。添加成功或失败都需要提示用户   列表好友: 用户输入 2后,好友信息

2017-07-27 10:36:10 1227

原创 顺序表的创建,插入,删除,查找,逆序以及合并两个有序的顺序表

SeqList.h文件: #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define FALSE  -1 #define TRUE    0 #define INIT_SIZE     100 #define INCRESS_SIZE  20   typedef int SeqData; // 顺序

2017-07-23 19:43:02 2358

原创 写一个程序判断当前系统存储模式是大端还是小端

大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端模式:字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。 分析:可以用公用体来解决这道问题。 程序: #include // 小端返回真(1),大端返回假(0) int isLittleEndian() { union { char ch; int a;

2017-07-21 10:05:19 1308

原创 链表的创建与输出

创建两个学生链表,含有姓名,年龄的信息,一个链表存放男生,一个链表存放女生 并且合并这两个链表。 #include #include #define LEN sizeof (struct student) struct student { char name[100]; int age; struct student *next; };

2017-07-19 17:47:31 700

原创 蓝桥杯李白醉酒问题

题目:“李白街上走,提壶去买酒,遇店加一倍,见花喝一斗”,途中,遇见5次店,见了10此花,壶中原有2斗酒,最后刚好喝完酒,要求最后遇见的是花,求可能的情况有多少种? 分析:这道题可通过递归函数来实现。 #include int count = 0; int libai (int store, int flower, int alco, int pre) { if (store

2017-07-18 20:30:20 718

原创 用递归函数实现十进制转换为十六进制输出

递归函数的定义,不应出现无终止的递归调用。而应定义为有限次数、有终止的递归调用函数。        对于一个问题,只要能够知道递归定义式,及边界条件(即递归终止的条件),就可以编写一个递归函数。 #include #define BASE 16 void tran (int n) { if (n == 0) return; tran (n / BASE); if (n

2017-07-18 20:23:28 13490 4

原创 字符串和指针的学习

今天学习了字符串和指针,通过下面这道题来巩固今天所学  编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构. 分析:先将整个字符串逆序,再通过指针来找到空格,再将每个单词逆序。 程序: #include #include int main() { char str

2017-07-16 20:39:11 282

原创 我的第一个C语言程序

在大一时虽然已经接触过C语言,并通过了二级C,但是并没有精通,这两天初学Linux C,想重学C,巩固并提高自己,下面是我自己做的第一道练习题: 1. 题目:通过编程实现,统计1~n有多少个9 提示:n通过参数传入 #include int fun(int); int main() { int n,c; printf("请输入一个数: "); scanf("%d",

2017-07-11 08:53:22 658

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除