博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-学习笔记
阅读量:5846 次
发布时间:2019-06-19

本文共 3848 字,大约阅读时间需要 12 分钟。

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

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

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

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

#include
#include
bool Find(int (*num)[4],int rows,int column,int number){ bool found = false; if(num!=NULL && rows>0 && column>0) { int col = 0; int row = rows-1; while(col
=0) { 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[4][4] = {
{
1,2,8,9},{
2,4,9,12},{
4,7,10,13},{
6,8,11,15}}; puts("please input your number:"); scanf("%d",&number); bool res = false; res = Find(num,4,4,number); printf("res:%d\n",res); return 0;}

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

面试题4:

代码如下:

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

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

面试题5:

#include
#include
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=0; for(;i<5;i++) { p = (linklist_t)malloc(sizeof(linknode_t)); p->data = i+1; p->next = NULL; r->next = p; r = p;//再将r指向队尾 }}//打印所有节点linknode_t * ShowLink(linknode_t *H,seqstack_t *T){ linknode_t *p,*r; int temp=0; p = H->next; while(p != NULL) { T->data[T->top]=p->data; p = p->next; T->top++; } --T->top; while(T->top>=0) { 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 = 0; return H;}int main(){ seqstack_t *T=CreateStack(10); // 获取一个空的栈 linknode_t *H=CreateLink(); InitLink(H); ShowLink(H,T); ClearLink(H); free(H); return 0;}

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

未完待续......

 

作者:
出处:

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

转载地址:http://ntzjx.baihongyu.com/

你可能感兴趣的文章
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Openstack API常用命令
查看>>
跟随我在oracle学习php(8)
查看>>
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
Kotlin的语法糖(一)基础篇
查看>>
亚信安全参加第六届全国等保技术大会 态势感知助力“等保2.0”落地
查看>>
大数据公司Palantir融得7亿美元 曾追踪拉登
查看>>
建立备份策略的重要性
查看>>
发力IoT领域 Marvell注重生态系统发展
查看>>
你应该知道的 RPC 原理
查看>>
Ubuntu安装词典
查看>>
Spring解析
查看>>
python中str和repr区别
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
kindeditor.net应用
查看>>
函数preg_replace()与str_replace()
查看>>