几个不同于引入第三方变量的交换方法。。 利用异或运算实现 #include<iostream> using namespace std; int main() { int a = 4; int b = 5; cout << "a= " << a << endl; cout << "b= " << b <<endl; a = a ^ b; b = a ^ b; a = a ^ b; cout << "改变后:\n"; cout << "a= " << a << endl; cout << "b= " << b <<endl; return 0; } 利用位运算交换 #include<iostream> using namespace std; int main() { i 继续阅读 >>


胡佳露 17/12/12 22:45:38
DFS深度优先遍历 深度遍历就是在图中从一个顶点开始,按照一个规则不重复地走下去。就是不撞南墙不回头一样。假如从A顶点开始,按照一个规则去走(假如我们按照一直字典顺序走)那么就从A走到B再从B走到了C,走到C后再按照字典顺序的时候,发现A已经走过,那么此时就退回到C点,选择另一个D走下去。就和树的前序遍历是一样的。 实现方式 1、递归实现(通过邻接矩阵来实现) void DFS(MGrap G. int i) { int j = 0; visited[i] = 1; count++; for(j=0; j<G.numVertexes; j++) { if(G.arc[i][j]==1 && !visited[j])//i和j有关系相邻,并且j顶点没有被访问过 { DFS(G, j); } } } void dfs(MGrap G,int v) { init(&s);//使用自定义 继续阅读 >>


胡佳露 17/12/04 11:56:54
基础定义 无向图:没有方向的图 连通图:任意两个顶点可以直接或者通过其他顶点走通,那么就是连通图,和完全图需要区别(完全图是需要任意两个顶点直接有路) 遍历图的基本方法来判断是否连通 DFS和BFS有的步骤都是从一个顶点开始,然后判断该顶点是否被访问,而且该顶点和其他顶点是否有关系,若有关系并且没有访问过,就往下访问,要是无向图是连通的,那么这个过程会依次下去遍历所有节点。所以通过这个特性,就可以设置一个全局变量count去记录,看最后count的值和顶点数是否相同,若相同则说明是无向连通图,反之则不是。 int count = 0; void DFS(MGrap G. int i) { int j = 0; visited[i] = 1; count++; for(j=0; j<G.numVertexes; j++) { if(G.arc[i][j]==1 && !visited[j])//i和j有关系相邻,并且j顶点没有被访问过 { 继续阅读 >>


胡佳露 17/11/27 22:18:30
#include<iostream> #include<algorithm> #include<iomanip> #define MAXSIZE 30 using namespace std; /*哈夫曼编码的存储方式*/ typedef struct Node { char ch; int weight; int parent,Lchirld,Rchirld; }Huff; void prinhuffman(Huff *HF,int m); Huff *huffman(Huff *HF, int n, int m); Huff *select(Huff *HF, int i, int *n, int *m); int select_min(Huff *HF,int i); /*创建哈夫曼树*/ Huff *cretahuffman(int n) //传入叶子节点的个数 { int i = 0; int m = 2*n-1;//计算总节点个数 Huff *HF; 继续阅读 >>


胡佳露 17/11/19 14:15:49
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #define Size 100 #define False 0 #define Ture 1 /*树的存储结构*/ typedef struct Tree { char data; struct Tree *Lift; struct Tree *Right; }Tree,*Btree; /*栈的建立*/ typedef struct stack { int top; Btree data[Size]; }sepstack; /*栈的初始化*/ sepstack *init(sepstack *stack) { stack = malloc(sizeof(sepstack)); stack -> top = -1; return stack; } /*判断栈空*/ int empty(sepstack *stack) { if 继续阅读 >>


胡佳露 17/11/19 14:08:22
开始学习cin, cin.get( ), cin.getline( )觉得还好。直到昨天错误地写了一个代码的时候,发现输入不正确了。然后对这个问题进行了一些总结。 cin(输入是以回车键结束,遇到空格停止读取) cin是从缓冲区读取数据的,那么当缓冲区有残留的数据的时候,按理来说cin也应该从缓冲区读取,并会跳过键盘输入的这个过程。 代码: #include<iostream> using namespace std; int main() { char ch1,ch2,ch3; int count = 0; string st1,st2; char c[20],b[20]; cout << "please intput the string1:\n"; cin >> c; cout << "please input the string2:\n"; cin >> b; cout << "c="< 继续阅读 >>


胡佳露 17/11/13 14:44:12
指针好像一直都是一个头疼的问题,从一级指针到二级指针的运用,总是经常出错。今天遇到的一个二级指针的问题,花了很多时间,想了一个比较合理的解释。 今天在数据结构的实验中,用一个二级指针作为参数来写了一个二叉树的建立。大概的函数代码如下: 存储结构如下: /*树的存储结构*/ typedef struct Tree { char data; struct Tree *Lift; struct Tree *Right; }Tree,*Btree; /*二级指针建立二叉树*/ void crea(Btree *root) { printf("%p\n",root); char ch; ch = getchar(); if(ch=='#') { (*root) = NULL; } else { *root=(Tree *)malloc(sizeof(Tree)); (*root)->data = ch; 继续阅读 >>


胡佳露 17/11/09 20:24:55
一、主要四层协议系统 注:顺序为从下到上 存在在内核空间的: 数据链路层 网络层 传输层 存在在用户空间的: 列表内容 二、对四层协议系统的简单理解 1、数据链路层 (1)常用协议是ARP和RARP,其中RAP是根据IP地址获取一个物理地址,而RARP则是相反的,通过一个物理地址获得IP地址。 (2)ARP用途:数据链路层是通过物理地址去寻找一个机器的,比如MAC地址。所以网络需要把目的IP地址转化成物理地址,才能有条件去使用数据链路层提供的服务 (3)RARP用途:在某些没有存储设备的工作站,因为无法记录下自己的IP地址,只能通过自己的物理地址去申请查询自己的IP地址 2、网络层 (1)网络层主要用的协议是IP协议和ICMP协议。其中IP协议是因特网协议,网络层最核心的协议,其次是因特网控制报文协议,是IP协议的重要补充,主要用于检测网络连接。实现数据包的选路和转发。 ICMP报文格式 8位类型 8位代码 16位校验和 注:报文的内容主要取决于报文的类型 (2)8位类型主 继续阅读 >>


胡佳露 17/11/07 20:15:04
三元表 三元表就是存储稀疏矩阵非零元素的行列位置及其元素值的一个表。对稀疏矩阵进行了压缩吧。 快速定位转置 该算法是对要被转置矩阵的三元表只进行一次扫描,使得所有的非零元素一次性就被存放到装置的三元表里。所以要预先确定原来矩阵每一列的第一个非零元素的位置,那么接下来的元素在转置的时候根据上一个元素在三元表的位置,可以推出自己的位置,并且依次放入应有的位置。所以同一列中有多少个非零元素,那么转置之后就会占用多少行,下一列的 实现思路 (1)首先要统计每一列的非零元素,存放到数组中 (2)根据非零元素的个数计算在三元表中的位置 (3)扫描三元表,根据非零元素的列,确定所在的行,然后查询在三元表中的位置,存入三元表中,修改三元表剩余的位置,使下一个元素能够准确找到自己在三元表中的位置。 实现代码 /************************************************************************* > File Name: nizhi.c > Author: &g 继续阅读 >>


胡佳露 17/11/05 13:26:49
前言 必须要写一个博客(外加吐槽),哇,不会用Mac真的感觉这个系统简直就是反人类的系统,因为要用到C语言连接操作mysql,然后就要有一个头文件mysql.h,然而这个文件的库肯定是要自己装的,但是mac又不能向Linux系统的那个操作,一个apt-get install 就好了。然后我想试探性地看下自己的include文件,年少无知啊,真的不知道mac下居然没有这个文件,所有的库函数什么.h都被它放到了Xcode下面。然后各种按照网上教程来连接,各种弄,一晚上,把Xcode的other link flags配置了一堆问题,编译都是错误……表示崩溃。。。晚上回来自己瞎摸索,终于解决了这个问题,网上有很多这个解决方案,但是都是针对Xcode的,反正自己的Xcode已经配置的有问题了,所以索性不弄了……换了一种解决思路,如果有include库就好了,把.h文件直接拷贝进去。 /usr/include 缺失解决 Xcode下有一个管理这些文件的软件吧,直接下载,之后那些文件都会被管理在include文件下 xcode-select --install 继续阅读 >>


胡佳露 17/08/11 01:17:19