C++中位域实例介绍



C++中位域介绍。一、位域

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

struct 位域结构名
{ 位域列表 };

其中位域列表的形式为: 类型说[......]

Read more

c++原地归并排序变形实例源码



c++原地归并排序变形。

题目:给出一个数组,数组中的两半都是已知顺序的,现要实现将这个数组有序化,要求空间复杂度为 O(1),时间复杂度尽可能的小,编程实现!

 

 

  1. #include <iostream>
  2. using namespace std;
  3. int arr[10] = { 1,3,5,7,9,2,4,6,8,10};
  4. //交换数据
  5. int swaparr(int &a,int &b)
  6. {
  7.     a=a+b;
  8. [......]

Read more

c++二分查找拓展

c++二分查找拓展,

#include <iostream>

using namespace std;
/**
题目说明:一组有序的数字,查找数组中某一个数据的位置,
如果当前数据有多个,查找到第一个数据的位置
*/
const int N = 7;
int arr[N] = {1,2,2,2,3,3,4};

int theSecondSearch(int a[],int n,int key)
{
int l,r,mid;
l=0,r=n-1;

while(true)
{
if(r==l && a[l]==key) //[......]

Read more

c++辗转相除法

c++辗转相除法。

#include <iostream>
using namespace std;
void swapdata(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
}
int modeDivision(int a,int b)
{
while(a=a%b)
swapdata(a,b);
return b;
}

int main()
{
cout << “Hello world!” << endl;
cout<<”division : “<&[......]

Read more

求递归式的时间复杂度问题

求递归式的时间复杂度问题,

题目:T(n) = 25T(n/5)+n^2的时间复杂度 ?

程序员面试宝典 时间复杂度问题!

使用算法导论中主方法来解决:

对于T(n) = a*T(n/b)+c*n^k;T(1)=c 这样的递归式,使用主方法有如下结论:

if ( a > b^k )      T(n) = O (n^(logb(a))) ; logb(a)   以b为底 a 对数

if ( a = b^k )      T(n) = O (n^k*logn) ;

if ( a < b^k )      T(n) = O (n^k);[......]

Read more

c++atoi函数介绍与代码实现实例

atoi函数介绍与代码实现,atoi函数是将字符串转化为整形数据,

说明:能够将从当前开始的字符(数字或+、-)到第一个不是数字的字符结束的数字字符串,转化成整数;

 

atoi 函数的代码实现!

 

  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. //将输入的字符串转化为 数据
  5. int implatement_atoi(char *a)
  6. {
  7.     int[......]

Read more

汉诺塔递归算法理解及实现

汉诺塔递归算法理解及实现,汉诺塔问题描述: A、B、C 三个桌子,其中A桌子上放了几个大小不同的盘子,盘子的排列顺序为: 从上到下,依次从小到大递增;现要求把这些盘子从 A 桌子上移动到 C 桌子上,盘子移动时有一点要求:每次移动必须保证三张桌子上大盘子在下、小盘子在上;打印移动次序。

如 A 上一张 盘子时,移动顺序: A -> C
代码实现:
[cpp] view plaincopy
<span style=”font-size:14px;”>#include <iostream>

using namespace std;

/**
*[......]

Read more

位运算应用举例

位运算应用举例。

一、位操作符介绍

单目操作符
1、   &   按位与
2、   | 按位或
3、 ~ 按位取反
4、 >> 右移操作符 (非循环)
5、 << 左移操作符 (非循环)
双目操作符
1、 ^ 取异或运算

二、异或操作的妙用

1. 使特定位翻转     要使哪几位翻转就将与其进行∧运算的该几位置为1即可。

2 与0相∧,保留原值.

3.交换两个值,不用临时变量.

我们可以在不用引入其他变量就可以实现变量值的交换

用异或操作可以实现:

      a = a^b;          //(1)[......]

Read more

字符串翻转问题

字符串翻转问题,

笔试题:
字符串翻转问题: 给定一个 “hello world”,将字符串翻转输出“world hello”;

[cpp] view plaincopy
#include <iostream>
#include <stdlib.h>
using namespace std;

char str[] = “This translation ah well”;
inline void swapstr(char &a,char &b)
{
a=a^b,b=a^b,a=a^b;
}
void stringrev[......]

Read more

单行链表寻找倒数第k个节点

单行链表寻找倒数第k个节点,

/**
*题目介绍:给出一个单向链表,输出该链表的倒数第k个节点
*           设尾节点开始从0编号
*/

解题思路:两个指针往后移动,一定要注意边界的处理情况。此处我设置了一个头指针,头指针不存数据,仅仅作为头标志。

 

 

[cpp] view plaincopy

  1. /**
  2. *题目介绍:给出一个单向链表,输出该链表的倒数第k个节点
  3. *           设尾节点开始从0编号
  4. */
  5. #include <iostream>
  6. #include &[......]

Read more