前言:18/06/06开始学习,每个程序都会用C写一遍,因书中用C++举例,也会换种思路写,供学习和参考!!!很推荐这本书很不错,准备入手,一般不买实体书,都用电子书,因一般都看一遍,但这本会看很多遍!无论刚毕业,还是跳槽都可以看一下...

面试题3:二维数组中的查找

题目如图,所有题目截图均引自《剑指offer》,接下来不再说明!

书中从右上角开始查找,我的程序从左下角查找:

#include<stdio.h>
#include<stdbool.h> bool Find(int (*num)[],int rows,int column,int number)
{
bool found = false;
if(num!=NULL && rows> && column>)
{
int col = ;
int row = rows-;
while(col<column && row>=)
{
if((*num)[row*column+col] == number)
{
found = true;
break;
}
if((*num)[row*column+col] < number)
++col;
else
--row;
}
}
return found;
}
int main()
{
int number;
int num[][] = {{,,,},{,,,},{,,,},{,,,}};
puts("please input your number:");
scanf("%d",&number);
bool res = false;
res = Find(num,,,number);
printf("res:%d\n",res);
return ;
}

对逻辑不理解的,可以随时留言,随时解答!!!

面试题4:

代码如下:

#include<stdio.h>

void ReplaceBlank(char string[],int length)
{
if(string==NULL && length<=)
return;
int originalLen = ;//字符串实际长度
int numBlank=,i=;
while(string[i] != '\0')
{
++originalLen;
if(string[i] == ' ')
++numBlank;
++i;
} //替换后的长度
int newLen = originalLen + numBlank*;
if(newLen > length)
return; int indexLen = originalLen;
int indexOfNew = newLen;
while(indexLen>= && indexOfNew>indexLen)
{
if(string[indexLen] == ' ')
{
string[indexOfNew--]='';
string[indexOfNew--]='';
string[indexOfNew--]='%';
}
else
{
string[indexOfNew--] = string[indexLen];
}
--indexLen;
}
} int main()
{
char buf[]={"hello world!"};
ReplaceBlank(buf,);
printf("buf:%s\n",buf);
return ;
}

注:重点理解从尾到头遍历的时间复杂度为O(n)!!!

面试题5:

#include<stdio.h>
#include<stdlib.h> typedef int data_t;
//栈结构
typedef struct LIFO
{
int *data; // 4字节的指针 指向数组(后分配的数组)
int maxlen; // 存储数据的个数最大值
int top;
}seqstack_t; //链表结构
typedef struct node{
int data;
struct node *next;
}linknode_t,* linklist_t; //创建空的链表
linknode_t *CreateLink()
{
linknode_t *H;
H = (linklist_t)malloc(sizeof(linknode_t));
H->next = NULL;
return H;
} //初始化一个空链表
void InitLink(linknode_t *H)
{
linknode_t *r,*p;//r指向队尾
r = H;
int i=;
for(;i<;i++)
{
p = (linklist_t)malloc(sizeof(linknode_t));
p->data = i+;
p->next = NULL;
r->next = p;
r = p;//再将r指向队尾
}
} //打印所有节点
linknode_t * ShowLink(linknode_t *H,seqstack_t *T)
{
linknode_t *p,*r;
int temp=;
p = H->next;
while(p != NULL)
{
T->data[T->top]=p->data;
p = p->next;
T->top++;
}
--T->top;
while(T->top>=)
{
printf("data:%-5d",T->data[T->top]);
T->top--;
}
} //清空链表
void ClearLink(linknode_t *H)
{
linknode_t *p,*q;//p是删除的节点,q记录下一个要删除的节点
q = H->next;
while(q != NULL)
{
p = q;
q = p->next;
free(p);
}
printf("\n");
H->next = NULL;
} seqstack_t * CreateStack(int max)
{
seqstack_t *H; // 分配结构体空间 --> 一个栈
H = (seqstack_t *)malloc(sizeof(seqstack_t));
H->data = (data_t *)malloc(sizeof(data_t) * max);// 结构体成员赋值
H->maxlen = max;
H->top = ;
return H;
} int main()
{
seqstack_t *T=CreateStack(); // 获取一个空的栈
linknode_t *H=CreateLink();
InitLink(H);
ShowLink(H,T);
ClearLink(H);
free(H); return ;
}

注:用栈的后进先出LIFO思想实现链表的从尾到头的输出!!!

未完待续......

剑指offer-学习笔记的更多相关文章

  1. 【剑指Offer学习】【全部面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全 ...

  2. 【剑指Offer学习】【所有面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退.只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代 ...

  3. 刷《剑指offer》笔记

    本文是刷<剑指offer>代码中的学习笔记,学习ing.. 衡量时间和空间. 递归的代码较为简洁,但性能不如基于循环的实现方法.

  4. 剑指Offer整理笔记

    说在前面,本篇的目的是为了学习剑指offer,以及博客园的排版功能,并将文章排版得整洁得体. 梵蒂冈梵蒂冈地方官方

  5. 《剑指Offer》笔记(更新中)

    这几天为了找工作开始看<剑指offer>,到现在也大概浏览一遍了,前两天看作者博客中提到九度OJ,就去看了一下,发现上面有书上的题目,就想可以自己写代码练习一下,而不仅仅是看解题思路,毕竟 ...

  6. 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

    最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...

  7. LeetCode—剑指 Offer学习计划

    第 1 天 栈与队列(简单) 剑指 Offer 09. 用两个栈实现队列 class CQueue { public: CQueue() { } stack<int>s1,s2; void ...

  8. 剑指offer学习读书笔记--二维数组中的查找

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序.请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数. 1 2 8 9 2 4 9 1 ...

  9. 【剑指Offer学习】【面试题55:字符流中第一个不反复的字符】

    题目:请实现一个函数用来找出字符流中第一个仅仅出现一次的字符. 举例说明 比如,当从字符流中仅仅读出前两个字符"go"时.第一个仅仅出现一次的字符是'g'.当从该字符流中读出前六个 ...

  10. 【剑指Offer学习】【面试题19 :二叉树的镜像】

    题目:请完毕一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义: /** * 二叉树的树结点 */ public static class BinaryTreeNode { int va ...

随机推荐

  1. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  2. 【信号与线性系统】为什么求解零输入响应时转移算子H(p)不能约分,但计算单位冲激响应时却可以约分?

    为什么求零输入响应rZI时转移算子H(p)不能约分? . . . 我们知道,求零输入响应rZI的实质其实是求解微分方程 D(p)r(t) = N(p)e(t) 的解.由于这里 e(t)=0 ,所以这是 ...

  3. Mysql双主互备+keeplived高可用架构(部分)

    一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种 ...

  4. 使用EasyUI的Datagrid的Editor进行行编辑,Enter回车结束编辑,并开启新的一行。

    //新增数据function add() { if (Index == undefined) { row = { move_date: '', start_time: '', end_time: '' ...

  5. 网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放

    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放. <meta name="viewport" conten ...

  6. Python_day8

    多态 class Animal(object): def run(self): print('animal is running') class Dog(Animal): def run(self): ...

  7. 20155205 郝博雅 Exp9 Web安全基础

    20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...

  8. Java变成思想--多线程

    Executor :线程池 CatchedThreadPool:创建与所需数量相同的线程,在回收旧线程是停止创建新县城. FixedThreadPool:创建一定数量的线程,所有任务公用这些线程. S ...

  9. MyBatis逆向工程自动生成代码

    MyBatis逆向工程根据数据库表自动生成mapper.xml,entity类,mapper类,简直不要 太方便好嘛 下面贴上关键配置代码,以免以后找不到 generator.xml <?xml ...

  10. Python开发系列

    一  Python基础理论 Python简介 数据类型 字符编码与文件操作 函数 模块与包 常用模块 面向对象 网络编程 相关代码示例参考 https://github.com/Jonathan131 ...