![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法+数据结构
文章平均质量分 62
dahai_881222
这个作者很懒,什么都没留下…
展开
-
判断机器的大小端模式
大端: 数据的高字节在低地址 , 数据的低字节在高地址小端:数据的低字节在低地址,数据的高字节在高地址采用联合体的方法来确定大小端#include using namespace std;union A{ char c[2]; short s;};void main(){ union A a1; a1.s = 0x1234; printf("原创 2012-09-25 09:31:16 · 863 阅读 · 0 评论 -
在O(1)时间内删去链表节点。
60.在O(1)时间内删除链表结点。 题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 函数的声明如下: void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted); 分析:这是一道广为流传的Goo原创 2012-07-31 20:43:04 · 281 阅读 · 0 评论 -
使用俩个栈实现一个队列的功能
使用两个栈实现一个队列的先进先出的功能。#include #include using namespace std;class CQueue{public: CQueue() {} ~CQueue() {} void appendTail(const int &element ); // append a element to原创 2012-09-02 20:56:06 · 595 阅读 · 0 评论 -
排序的时间复杂度为O(n),空间复杂度为O(1)
利用整数的范围一般是0~65535.我们就声明一个65535大小的数组exist[65535]然后,让待排序的数组a[]={1,2,3,4,5,1,6,3};让数组a[]的每个值作为数组exist[]的下标,例如exist[a[0]] = exist[1] ++。由于出现了两个1,所以exist[1] = 2;以此类推得到了exist[2] =1,exist[3] =2 ,exist[4]原创 2012-09-02 15:40:23 · 1847 阅读 · 0 评论 -
48.微软: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
48.微软: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。#include using namespace std;int findx(int a[] , int k ,int start ,int end){ int i; int m =end ; int mid;原创 2012-09-02 14:58:19 · 1165 阅读 · 0 评论 -
将字符串进行左右移动
将字符串abcdefg 左移变为 efgabcd先把字符串整体的逆置,然后,在单独的拟制#include #include using namespace std;char *xuanzhuan(char str[], int m){ int i,len; char tmp; char *p = str; len = strlen(str); for(i原创 2012-09-01 15:06:32 · 1254 阅读 · 0 评论 -
实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3 这些都要找出来
实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3 这些都要找出来方法一:#include using namespace std;bool is_baohan(char *str1 ,char *str2){ int i , j ,k ,len1 ,len2; bool is_b原创 2012-09-01 19:01:59 · 4590 阅读 · 0 评论 -
在从1 到n 的正数中1 出现的次数
题目:输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数。 例如输入12,从1 到12 这些整数中包含1 的数字有1,10,11 和12,1 一共出现了5 次。 分析:这是一道广为流传的google 面试题。采用的方法是把整数转化为字符,然后统计‘1’的个数#include using namespace std;int findx(int num){原创 2012-09-01 16:46:11 · 1323 阅读 · 0 评论 -
跳台阶问题
题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。 求总共有多少总跳法,并分析算法的时间复杂度。 这道题最近经常出现,包括MicroStrategy 等比较重视算法的公司 都曾先后选用过个这道题作为面试题或者笔试题。 #include using namespace std;int f(int n){ if(n==0) { return 1;原创 2012-09-01 15:24:31 · 549 阅读 · 0 评论 -
单链表合并
将两个单链表合并,一般前提是两个单链表是已经排好序的,默认是按升序排列的。#include using namespace std;typedef struct LinkNode{ int data; struct LinkNode *next;}node;node *merg(node *head1,node *head2){ node *pa=head1原创 2012-09-01 14:06:24 · 497 阅读 · 0 评论 -
求一个矩阵中最大的二维矩阵(元素和最大).
1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用C 写出关键代码#include using namespace std;void findx(int a[][5] , int m ,int n){ int i ,j ,tmp ,count[100], k,x,y; k = 0;原创 2012-09-01 19:40:27 · 987 阅读 · 0 评论 -
2012年人人网校园招聘笔试—试题以及答案陆续给出
C++笔试题目。1.算法的几个概念:时间复杂度,空间复杂度等等。2.采用链地址法处理长度的时候,哈希表查找成功的平均长度与哪些因素有关?哈希表的装填因子有关。装填因子= 表中填入的记录数/哈希表的长度。3.二叉树节点的计算: 二叉树中度为1的节点有8个,度为0的节点有3个,问这颗二叉树总共有多少节点? 对于任意一棵二叉树BT,如果度为0的结点个数为n0,度为2的原创 2012-08-13 16:53:03 · 877 阅读 · 0 评论 -
二叉树两个最低的共同父节点
75.二叉树两个结点的最低共同父结点题目:二叉树的结点定义如下: struct TreeNode{ int m_nvalue; TreeNode* left; TreeNode* right; }node; 输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。思路: 如果这两个节点不在同一个子树下面,那么这棵树的根节点就是他们的共同最低父节点。如果两个转载 2012-07-31 20:46:02 · 1805 阅读 · 0 评论 -
二叉树的前序中序递归,非递归遍历
二叉树的前序,中序 ,递归,非递归遍历 例如 二叉树 10 / \ 6 14 / \ / \原创 2012-08-01 15:08:09 · 1481 阅读 · 0 评论 -
计算二叉树的任意两节点的最远距离。
利用计算二叉树高度的方法计算两个节点最远距离。计算出一个节点的深度,左右子树的深度,然后加起来,就是这个节点的最远的距离了。然后遍历二叉树的所以的节点,找出最大的节点即可。#include using namespace std;typedef struct BtreeNode{ int data; struct BtreeNode *left,*right;}no原创 2012-09-02 16:31:45 · 1903 阅读 · 1 评论 -
将给出的字符全排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串 abc、acb、bac、bca、cab 和cba。 #include using namespace std;void f(char *str ,int start ,int end){ if(start == end) { cout<<str<原创 2012-09-02 18:59:20 · 856 阅读 · 0 评论 -
一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。先将数组右移恢复为原来的递减数列,然后运用二分查找即可。 #include using namespace std; void zuoyi(int a[] ,int len){ int i , j, k, tmp; for(原创 2012-09-20 21:35:06 · 2505 阅读 · 0 评论 -
求出两个字符串的最大公共字符串
例如字符串 str1 = "abcdefg";str2="cdefbcderg";最长的公共字符串为 cdefvoid getcommon(const char *str1 ,const char *str2){ int i ,j ,len1 ,len2 ,count,max; char *pa ,*pb; max = 0;原创 2012-09-20 10:44:41 · 782 阅读 · 0 评论 -
华为上机试题
1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。 函数原型为 int compare_原创 2012-09-16 17:05:43 · 777 阅读 · 0 评论 -
输入N个数,从1开始数数到m就把这个数删去,从新从它的下一个从1开始数,直到把所有的都删除。
采用循环单链表的方法:每当遇到m的时候就把这个值从链表中删去,从新从它的下一个链表开始数数。#include using namespace std;typedef struct circleLink{ int data; struct circleLink *next;}node;node *create(int n){ node *head =原创 2012-09-16 10:22:07 · 1710 阅读 · 0 评论 -
中兴通讯2012笔试题删除双向循环链表中相同的数值
双向循环链表pHeadA ,pHeadB,例如 pHeadA 数据为 1,2,3,4,5,7 pHeadB数据为 1,2,6,2,1,7,3删除相同数值后为 pHeadA 4,5 pHeadB 6#include using namespace std;typedef struct DoubleLinkNode{ int data; struct Doub原创 2012-08-31 17:32:52 · 2251 阅读 · 0 评论 -
n个人,两成一个圈,编号从0到n-1 .从0开始数,遇到3或者3的倍数,那么就删除这个数,从下一个从新开始数,最后剩下的数的编号。
我采用的是循环链表的方法,没遇到一个符合的数,则就删除这个数。继续读取下一个数。首先创建链表:给这个链表节点的赋值分别从0到n-1。由于是循环链表,最后的节点需要指向头结点。我这个头结点不仅仅是指针,还有数据。#include using namespace std;typedef struct LinkNode{ int data; struct Link原创 2012-09-09 19:54:35 · 2125 阅读 · 0 评论 -
将整数转化为二进制,采用递归方法
#include using namespace std;#define N 100char a[N];void convert(int n,int i){ if(n>0) { a[i] = n%2; n = n/2; i++; convert(n , i); }}void main(){ int i; for(i =原创 2012-09-09 20:46:21 · 828 阅读 · 0 评论 -
关于指针 与 字符数组
在我们写代码中使用到指针的字符串时,经常会出现运行错误,大部分出现的错误是试图去改变指针的字符串的内容。指针的字符串的内容是保存在静态数据区的,是不能够改变的。需要使用字符数组。例如改变char *p="abcdef";p[1]='d';这是错误的不能改变里面的内容,但是可以使用里面的数据char p[]="abcdef";p[1]='d';这是可以的,数组是临时变量,原创 2012-09-09 20:15:08 · 459 阅读 · 0 评论 -
实现双链表的排序
实现双链表的排序:方法一:就是不变动节点,只把节点中数据进行交换。采用选择排序法: #include using namespace std;typedef struct DouLinkNode{ int data ; struct DouLinkNode *pre ,*next;}node;node *create(int n)原创 2012-09-07 20:32:28 · 5731 阅读 · 0 评论 -
声明一个类MyString,定义它里面的各个函数
题目:类CMyString的声明如下:class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str);private: char* m_pData;};原创 2012-09-02 20:27:13 · 3019 阅读 · 0 评论 -
将数组里面的奇数全部排在前面,偶数排在后面
方法一:声明一个数组,与原来的数组大小一样,遍历原来的数组,把找到的奇数放在前面,找到的偶数放在后面。#include using namespace std;void tiaozheng(int a[],int n){ int i,j,k,m; int b[100]; k =0; m =原创 2012-09-02 19:27:31 · 9700 阅读 · 0 评论 -
从顶层开始逐层打印二叉树节点数据
从顶层开始逐层打印二叉树节点数据 10 / \ 6 14 / \ / \ 4 8 12 16逐层打印的结果为 10 6 14 4 8 12 16采用队列的方式 ,先把根节点存入队列,然后再出列,输出这个数据。如果原创 2012-08-01 13:01:57 · 1304 阅读 · 0 评论 -
2012联发科校园招聘手机软件部门试题详解
2012联发科校园招聘 手机软件部门笔试&第一轮面试 试题详解 选择题我有印象的:1.int p = (short)0x8000,问打印p是多少?-32678将16 位short扩展为 32位int ,把符号位一起扩展 oxffff8000,最高位为 1是负数,取反加1 得到-32768 2.##的使用(连接):define call(x,y) x##y3.原创 2012-08-13 16:56:20 · 3538 阅读 · 0 评论 -
2012年腾讯校园招聘笔试
腾讯的笔试题目比较基础具体的题目记不清除了,设计到的知识点:1.c语言基础:sizeof,strlen的用法。2.linux基本命令umask3.SQL语言4.数据结构的知识,建立二叉树,顺序表操作的复杂度5.操作系统的知识:通过页表确定物理地址,死锁(说有6个进程,每个进程需要5个同样资源才能运行,问系统中至少要几个资源才能保证不出现死锁?),页换出次数(使用LRU),文转载 2012-08-19 18:19:18 · 592 阅读 · 0 评论 -
strcmp() , strncmp();
int strncmp(const char *str1 , const char *str2 , int n);比较 字符串的前n个字符,相等则返回 0;如果不相等那么返回 str1[i] - str2[i];int my_strncmp(const char *str1 , const char *str2 ,int n){ int i = 0; int k; for(原创 2012-08-19 17:34:14 · 511 阅读 · 0 评论 -
如果单链表中有环,那么找出入环的第一个节点
如果单链表有环,找出入环的第一个节点,如果单链表有环,那么就应该存在两个指针,能够在环上存在两个指针相同。p1 == p2这样就在p1处断开这个环,相当于一个Y型的相交环了,一个单链表头结点为head ,另一个单链表头结点为p1 ,这样就从head ,p1出发,直到找出第一个相等的节点就是入环的第一个节点了 // 首先要找到是否有环,并找到在换上相同的那个节点,并返回节点n原创 2012-08-05 14:37:49 · 856 阅读 · 0 评论 -
进行链表的排序的一种方法,
进行单链表排序的方法,不改变链表的链接顺序,只是改变每个链表节点中的数据head->p0->p1->p2->p3->NULL;typedef struct LinkNode{ int data;struct LinkNode *next;}node;node *create(int n){node *head = (node*)malloc(s原创 2012-08-05 10:14:46 · 637 阅读 · 0 评论 -
一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。本文没有开辟新的空间,只是进行数据的交换,并且没有使用额外的数组。对数组中的每一个数进行验证,以确定它是否符合左边都小于它,右边都大于它的。void main(){ int a[]={1,2,4,3,5,7,6,8}; i原创 2012-08-02 23:02:03 · 727 阅读 · 0 评论 -
百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n) void chongpai(int a[] ,int len){ int i ,k ,b[100]; b[100]={0}; k =0; for(i = 0;i {原创 2012-08-02 22:24:32 · 2669 阅读 · 1 评论 -
memset(),memmove(),memcpy(),memccpy()
memset()函数实现void *memset(void *buffer ,int c ,int count) //把buffer前count个字节设置为内容c{ char *pvTo =(char*)buffer ; assert(buffer != NULL); while(count >0) { *原创 2012-08-02 22:17:00 · 461 阅读 · 0 评论 -
已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde 的个数,如果没有返回0,有的话返回子字符串的个数。
已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde 的个数,如果没有返回0,有的话返回子字符串的个数。 void findx(char *str1 ,char *str2){ int i = 0; int j; int k = 0; int m; while(str1[i] != '\0') { j = 0; if(str1[i原创 2012-08-02 20:15:43 · 804 阅读 · 0 评论 -
求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”) void findx(char *str){ int i , j, m,k ,tmp,start,end,count[100] ,count_1[100] ,count_2[100]; i =0; k = 0; while(str[i] != '\0') {原创 2012-08-02 17:31:54 · 1797 阅读 · 0 评论 -
实现strstr 功能,即在父串中寻找子串首次出现的位置。
实现strstr 功能,即在父串中寻找子串首次出现的位置。例如 str="abcdefgcde"; str1 ="cde"; 则首次出现的位置为 str[2] 第三个字符int findx(const char *str ,const char *str1){ int i ,j ,m,n; i = 0; j =原创 2012-08-02 16:42:00 · 1009 阅读 · 0 评论 -
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序
2005 年11 月金山笔试题。编码完成下面的处理函数。 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间) void main(){ char *str ="abc原创 2012-08-02 15:15:39 · 1683 阅读 · 0 评论