![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
wpfbcr
这个作者很懒,什么都没留下…
展开
-
不使用(a + b) / 2这种方式,求两个数的平均值
#includeint ave(int a, int b){return (a & b) + ((a ^ b) >> 1);}int main(){int a = 10;int b = 14;printf("%d", ave(a,b));}//巧妙使用运算符会使程序简单本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/1069原创 2016-05-29 16:53:22 · 249 阅读 · 0 评论 -
数据结构--二叉树的线索化
线索二叉树它解决了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题,出现了二叉链表找左、右孩子困难的问题,线索二叉树又分为前序线索化,中序线索化和后序线索化,分别用不同的逻辑去实现。线索二叉树的实现思想:借用一个枚举类型tag其中包含两个状态Link(代表有数据),thread(代表下一个节点为空)在一个节点的左节点或者右节点为空的情况下,将它的left或right设为thread,则它的原创 2016-05-29 16:54:13 · 233 阅读 · 0 评论 -
数据结构--二叉树(1)
二叉树构建:二叉树的构建采用的是先序遍历,->先储存根节点然后左右节点,用递归的思想将所有数据放在树中。代码实现:实现了4种访问方法,先序,中序,后序,和层序的访问方法都采用递归的方式。#include#include#includeusing namespace std;template struct rootnode{ T _value; rootnode *_leftnod原创 2016-05-29 16:54:07 · 166 阅读 · 0 评论 -
数据结构-- 广义表
广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。思想:广义表就类似下图的结构,他的大体(下图第一行)相当于一个带头结点的链表, 代码思想,首先要有一个头结点为HEAD类型,每一个广义表有且只有一个HEAD,而后每个节点如果有分支则把它定义为SUB类型,SUB便是它分支的一个新头他有一个su原创 2016-05-29 16:54:04 · 295 阅读 · 0 评论 -
数据结构---哈希表(KV模式)(除留余数法)
可以实现快速定位查找数据思想一:开一个适当大小的数组,讲需要存入的数据%上数组的_capacity的到的数作为他存放的位置,如果这个位置被占了,则在他的下一个位置存放数据(不会找不到空位置,下面会说到)。思想二:存放在数组上的是一个结构体,结构体包含一个索引值Key,存储值Value,和一个存储状态(枚举类型,EXIST,EMPTY,DELETE)可以使用这三种状态进行判断和懒人删除法(不用清除数原创 2016-05-29 16:54:01 · 1226 阅读 · 0 评论 -
数据结构----稀疏矩阵的快速转置
使用两种方法将稀疏矩阵快速转置#include#includeusing namespace std;templatestruct Triple //三元组{ size_t row; size_t col; T _value;};templateclass SparseMatrix{public: SparseMatrix(T *arr, size_t rowsi原创 2016-05-29 16:53:57 · 330 阅读 · 0 评论 -
简单模拟STL库中string的实现
#include#include#include#define CAPACITY 3using namespace std;class String{public: String(char *str="") :_str((char*)malloc(strlen(str)+1)), _size(strlen(str)) { strcpy(_str, str);原创 2016-05-29 16:53:55 · 159 阅读 · 0 评论 -
简单的单链表<实现单链表的增删查改逆序和寻找中间节点>
为了方便在c++中完成#include#include#includetypedef int datatype;typedef struct SingleLinkList{ datatype _data; SingleLinkList *_nextlist;}SingleLinkList;void PrintList(SingleLinkList* phead){ S原创 2016-05-29 16:53:52 · 156 阅读 · 0 评论 -
简单的动态线性表
头文件#ifndef __TEST_H__#define __TEST_H__#include#include#include#include#define MAX 3 //方便测试给一个小空间typedef int datatype;typedef struct Seqlist{ datatype *_Array; size_t _size; size_t _capa原创 2016-05-29 16:53:49 · 221 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
#includevoid sort(int *p, int len){ int *end = p; end = p + len - 1; while (p<end) { if (*p % 2 == 0) { while (end) { if (*end % 2 == 1) { break; } end--; }原创 2016-05-29 16:53:46 · 208 阅读 · 0 评论 -
指针数组与数组指针 和 函数指针与函数指针数组
很容易混淆的概念其实并不难理解1,指针数组;看字面意思就知道这一定是一个数组,里面的原酸全部是指针例如,定义一个简单的指针数组char *p[10]; //这就是一个包含十个字符指针的数组。例:#includeint main(){ char *p[7]; char arr[] = "abcdef"; int i = 0; for (i = 0; i { p[i] = arr; } pr原创 2016-05-29 16:53:43 · 167 阅读 · 0 评论 -
判断一个数或者一串字符串是不是回文数
一、判断一个整数是不是字符串 例123321是回文数#includeint my_reserve(int num){ int sum = 0; while (num) { int tmp = 0; tmp= num % 10; num = num / 10; sum = tmp+sum*10; } return sum;}int main(){ int原创 2016-05-29 16:53:40 · 608 阅读 · 0 评论 -
编写程序将"hello-NOworld"变成"hello-world"
从字符串str"hello-NOworld"中删除字符串sub"NO"如果找到并成功删除返回1,不然那返回0。#include#includeint my_substr(char *str,const char*sub){ assert(sub); char *cp1_str = str; char *cp2_str = str; const char *cp_sub = s原创 2016-05-29 16:53:37 · 254 阅读 · 0 评论 -
简单的冒泡排序
冒泡排序是一种简单的排序方法。#includeint main(){ int arr[] = { 1, 3, 5, 6, 8, 4, 2, 9, 7, 10 }; int i = 0; int k = 0; int len = sizeof(arr) / sizeof(arr[0]); for (i = 0; i <len; i++) { for (k = 0; k < len原创 2016-05-29 16:53:34 · 210 阅读 · 0 评论 -
使用可变参数列表实现求平均值的函数
#include#includeint average(int n, ...){ va_list num;--》va_list是类型,num是变量 va_start(num, n);初始化 int i = n; int sum=0; for (i = n; i > 0; i--) { sum += va_arg(num, int);读取加入num } return sum原创 2016-05-29 16:53:31 · 303 阅读 · 0 评论 -
揭露函数所传递参数的本来面目
传递函数时的会发生参数拷贝,新建地址,但是数组是除外的。例1;把两个数由小到大输出我们用两种不同的方式来验证我所说的机制。方式一;直接传。(不会发生交换)#includevoid change(int a, int b){ int tmp = a; a = b; b = tmp; printf("change:a=%d %p\n,b=%d %p\n", a, &a, b, &b);}原创 2016-05-29 16:53:29 · 180 阅读 · 0 评论 -
左右翻转二进制数==》繁琐与精简
实现://00000000000000000000000000011001//10011000000000000000000000000000这种翻转方法一和方法二思路大致一样,可以方法二却十分麻烦。方法一(简单)#include#includeunsigned int reverse_bit(unsigned int value){ int i = 0;原创 2016-05-29 16:53:25 · 239 阅读 · 0 评论