平台:win10 x64 +VC6.0

2019/5/22

1.合并三个有序的链表

链表节点定义
struct node
{
    int val;
    struct node* next;
};

struct node* merge_3 (形参由你定义)
{
    //这部分是实现
}

当输入的有序链表是多个的时候,请给出合并算法,并假设链表个数为m,平均长度为n,请分析时间复杂度

思路:参看 https://blog.csdn.net/wwxy1995/article/details/82120194

 #include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20 typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next; }Node; typedef struct Node *LinkList; // 初始化链表
bool InitList(LinkList *L) // 二级指针
{
*L = (LinkList)malloc(sizeof(Node)); //产生头结点,并使L指向此头节点
if (!(*L)) // 存储分配失败
return false;
(*L)->next = NULL;
return true;
}
void CreateFromTail(LinkList L)
{
Node *r, *s;
int temp;
r = L; // r指向链表的当前表尾,其初值指向头节点
while ()
{
scanf("%d", &temp);
if (temp == -)
{
r->next = NULL;
break;
}
s = (Node*)malloc(sizeof(Node)); // 建立新结点s
s->data = temp;
r->next = s;
r = s; }
} // 遍历链表
void PrintList(LinkList L)
{
bool flag = true;
Node *p;
p = L->next;
while (p)
{
if (flag)
{
printf("%d", p->data);
flag = false;
}
else
printf(" %d", p->data);
p = p->next;
}
printf("\n");
} LinkList MergeLinkList(LinkList L1, LinkList L2)
{
LinkList L3;
InitList(&L3); Node *p, *q, *r, *s;
p = L1->next;
q = L2->next;
r = L3;
while (p&&q)
{
if (p->data < q->data)
{
s = (Node*)malloc(sizeof(Node));
s->data = p->data;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
else
{
s = (Node*)malloc(sizeof(Node));
s->data = q->data;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
} if (p == NULL)
{
r->next = q;
}
if (q == NULL)
{
r->next = p;
}
return L3;
} int main()
{
LinkList L1,L2,L3,L4;
InitList(&L1); // 指针的地址
InitList(&L2); // 指针的地址
InitList(&L3); // 指针的地址
InitList(&L4); // 指针的地址
CreateFromTail(L1);
PrintList(L1);
CreateFromTail(L2);
PrintList(L2);
CreateFromTail(L3);
PrintList(L3);
L4 = MergeLinkList(L1, L2);
PrintList(L4);
L4 = MergeLinkList(L3, L4);
PrintList(L4);
if (L4->next)
PrintList(L4);
else
printf("NULL\n"); }

合并三个有序的链表

时间复杂度:O(max(length(L1),length(L2),length(L1)+length(L2),length(L3)))

2019/5/23

1.“ hello world”转为“ world hello”

思路:参看 C语言字符串指针(指向字符串的指针)详解:http://c.biancheng.net/view/2012.html

 #include <stdio.h>
#include <string.h> void ReverseString(char* s, int from, int to)
{
while(from < to)
{
char t = s[from];
s[from++] = s[to];
s[to--] = t;
}
} void LeftRotateString(char* s, int n, int m)
{
m %=n;
ReverseString(s, , m-);
ReverseString(s, m+, n-);
ReverseString(s, , n-);
} int main(void)
{
int n = , m = , i;
char s[] = "hello world";
printf("转换前的字符串为:%s\n", s);
n = strlen(s);
for(i = ; i < n; i++)
if(s[i] == ' ')
m = i; printf("n=%d,m=%d\n", n,m);
LeftRotateString(s, n, m);
printf("转换后的字符串为:%s\n", s);
return ;
}

字符串反转

时间复杂度O(n),空间复杂度O(1)

2.无序数组,找出全部重复元素

思路:参看《编程之法》1.1字符串的旋转 解法二:三步反转

 #include <stdio.h>

 /* 判断一个数组中是否有重复元素,若有,返回位置及元素 */
void hasDup(int arr[], int n)
{
int i, j;
for(i=; i<n-; i++)
{ for(j=i+; j<n; j++)
if(arr[j] == arr[i])
{
printf("数组中第%d个位置存在重复元素:%d\n",j,arr[i]);
break;
}
continue;
}
} /* 主函数 */
int main()
{
int arr[] = {, , , , , , , , , };
int n = ; hasDup(arr, n); return ;
}

查找无序数组重复元素及位置

3.给定数组arr,返回arr的最长递增子序列

思路:参看左程云 《程序员代码面试指南》  https://blog.csdn.net/hahayikeshu/article/details/85549681

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n=,k[],h[],g=,j,t;
char c;
char m[];
printf("请输入子序列:");
memset(k,,sizeof(k)); //把数组k元素全置为零
while(n--)
{
int i=,l=;
getchar();//滤掉回车
while((c=getchar())!='\n')
{
m[i++]=c;//把输入的元素逐个存入数组
}
for(j=;j<i-;j++)
{
if(m[j]<m[j+])
{
k[l]=k[l]+;
}
else
l++;
}
l++;
if(l==)
{
if(k[]<k[])
{
t=k[];
k[]=k[];
k[]=t;
}
}
if(l>)
{
for(j=;j<l-;j++)
for(i=;i<l-j-;i++)
if(k[i]<k[i+])
{
t=k[i];
k[i]=k[i+];
k[i+]=t;
}
} h[g]=k[];
g++;
}
for(int i=;i<g;i++)
{
printf("\n");
printf("单调递增最长子序列长度为:%d\n",h[i]+);
}
return ;
}

输入数组arr,返回最长递增子序列的长度

参考:最长递增子序列的三种算法  https://blog.csdn.net/love20165104027/article/details/79618367

4.升序数组,找出最接近定值sum的两个元素,并输出

思路:二分查找 参看 https://blog.csdn.net/GenuineMonster/article/details/88838346

问题:long long定义时,如果还用scanf()函数输入,编译器不报错,但是输入的数字完全改变。

针对这个问题,我也找到了相应的解决办法,请看这篇文章:https://blog.csdn.net/GenuineMonster/article/details/88813979

 #include<stdio.h>
#include<stdlib.h>
int a[];//存放升序排列的一列数字
int b[];//存放要找的数字
int m;//输入要查找的数的个数
long finder(int mx, int mn, int mid, int j)//
{//第一步区分查找的这个数是否在开区间内
if (b[j] <= a[mn] || b[j] >= a[mx])//不在
{
//对内部进行细分,到底是比最小的还小,还是比最大的还大
if (b[j] <= a[mn]) //比最小的还小
{
printf("%d\n", a[mn]);
printf("%d\n", a[mn+]);
}
else//比最大的还大
{
printf("%d\n", a[mx-]);
printf("%d\n", a[mx]);
}
}
else//位于最小的数字和最大的数字之间
{
//根据mid来分,比mid大还是比mid小,还是和mid相等
if (a[mn]<b[j] && b[j]<a[mid])//比mid小
{
if (mid - mn != )
{
mx = mid - ;//将mx替换为mid
mid = (mn + mx) / ;//重新计算mid下标
finder(mx, mn, mid, j);
}
else
{
if (a[mid] - b[j]>b[j] - a[mn])//比较距离
printf("%d\n", a[mn]);
else if (a[mid] - b[j]<b[j] - a[mn])
printf("%d\n", a[mid]);
else
printf("%d %d\n", a[mn], a[mid]);
} }
else if (a[mid]<b[j] && b[j]<a[mx])//比mid大
{ if (mx - mid != )
{
mn = mid;//重新计算mn
mid = (mn + mx) / ;//重新计算mid下标
finder(mx, mn, mid, j);
}
else
{
if (b[j] - a[mid]>a[mx] - b[j])
printf("%d\n", a[mx]);
else if (b[j] - a[mid]<a[mx] - b[j])
printf("%d\n", a[mid]);
else
printf("%d %d\n", a[mid], a[mx]);
}
}
else//和mid相等
{
printf("%d\n", b[j]);
if((b[j]-a[mid-]) >= (a[mid+]-b[j]))
printf("%d\n", a[mid+]);
else
printf("%d\n", a[mid-]);
}
}
return ;
}
int main()
{
int j = ;//用作函数循环的
int n;//输入非降序序列的长度
printf("请输入非降序序列的长度:");
scanf("%d", &n);
printf("请输入非降序序列:");
for (int i = ; i<n; i++) //循环输入n个数字
scanf("%d", &a[i]);
//scanf("%d", &m); //输入要查询的数字个数
//for (int i = 0; i<m; i++) //循环输入要查找的数,存在b[i]中
printf("请输入要查找的元素sum:");
scanf("%d", &b[]);
int mx = n - , mn = ;
int mid = (mx + mn) / ;
// for (j = 0; j<m; j++)//循环调用函数,把b[j]中存储的所有要找的数字找完
finder(mx, mn, mid, );
//system("pause");
return ; }

输入一升序数组,返回最接近给定值的两个元素

程序面试题——C实现的更多相关文章

  1. 使用java理解程序逻辑 试题分析

      1.编译Java Applet源程序文件产生的字节码文件的扩展名为() A:.java B..class C:Html D:Exe 正确答案:B 试题分析: 本题考查的是Java程序的开发过程.J ...

  2. 微信小程序面试题

    小程序与原生App哪个好? 答: 小程序除了拥有公众号的低开发成本.低获客成本低以及无需下载等优势,在服务请求延时与用户使用体验是都得到了较大幅度  的提升,使得其能够承载跟复杂的服务功能以及使用户获 ...

  3. 《Java理解程序逻辑试题分析》

    1.以下关于开发java程序的描述错误的是 (). (选择一项) A:开发Java程序的步骤包括:编写源程序.编译.运行 B:编写的Java源程序文件使用 java作为扩展名 C:Java源文件经编译 ...

  4. 微信小程序面试题总结

    A类问题 1 请谈谈微信小程序主要目录和文件的作用? project.config.json 项目配置文件,用得最多的就是配置是否开启https校验: App.js 设置一些全局的基础数据等: App ...

  5. [UOJ#127][BZOJ4195][NOI2015]程序自动分析

    [UOJ#127][BZOJ4195][NOI2015]程序自动分析 试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2, ...

  6. 清橙OJ 1082 查找第K小元素 -- 快速排序

    题目地址:http://oj.tsinsen.com/A1082 问题描述 给定一个大小为n的数组s和一个整数K,请找出数组中的第K小元素. 这是一个补充程序的试题,你需要完成一个函数: int fi ...

  7. 2018上IEC计算机高级语言(C)作业 第3次作业_说明

    一.博客作业内容 2018上IEC计算机高级语言(C)作业 第3次作业 二.评分规则说明 1.程序调试题,要描述出调试所遇到问题及修改内容,并表述清楚程序功能.流程图不规范的会减1-2分: 2.知识点 ...

  8. IEC2017级_1-2班2次博客作业成绩说明

    一.博客作业内容 2018上IEC计算机高级语言(C)作业 第2次作业 二.评分规则说明 1.程序调试题,要描述出调试所遇到问题及修改内容,并表述清楚程序功能.流程图不规范的会减1-2分: 2.知识点 ...

  9. [No000096]程序员面试题集【上】

    对几家的面试题凭记忆做个总结,基本全部拿到offer,由于时间比较长,题目只写大体意思,然后给出自己当时的答案(不保证一定正确): abstract类不可以被实例化 蛋糕算法: 平面分割空间:(n-1 ...

随机推荐

  1. scikit-learn机器学习(四)使用决策树做分类,并画出决策树,随机森林对比

    数据来自 UCI 数据集 匹马印第安人糖尿病数据集 载入数据 # -*- coding: utf-8 -*- import pandas as pd import matplotlib matplot ...

  2. JAVA 基础编程练习题26 【程序 26 求星期】

    26 [程序 26 求星期] 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if ...

  3. 知识点整理-网络IO知识总结

    UNIX 系统下的 I/O 模型有 5 种 同步阻塞 I/O.同步非阻塞 I/O.I/O 多路复用.信号驱动 I/O 和异步 I/O 什么是I/O 所谓的I/O 就是计算机内存与外部设备之间拷贝数据的 ...

  4. C语言的灵魂——指针基础

    一.什么是指针 1.指针的定义:地址形象化为指针,通过指针能够找到内存单元. 指针变量就是地址变量,变量的值为指针. 指针其实是我们将变量名和地址的关系显化(独立)出来的一种形式,是为了我们更加方便的 ...

  5. jackson 实体转json 为NULL或者为空不参加序列化【转载】

    原博客:https://www.cnblogs.com/yangy608/p/3936848.html 1.实体上 /** * 将该标记放在属性上,如果该属性为NULL则不参与序列化 * 如果放在类上 ...

  6. OpenCV.物体识别

    1.度娘:“OpenCV 物体识别” 1.1.opencv实时识别指定物体 - 诺花雨的博客 - CSDN博客.html(https://blog.csdn.net/qq_27063119/artic ...

  7. Django各个文件中常见的模块导入

    app01 app01 urls.py from django.conf.urls import url from django.contrib import admin from admins im ...

  8. ztree根据ztreeId【节点id】设置展开、选中、触发点击节点事件

    有时候我们要默认选中某个节点,根据ztreeId // 这里的ztreeId就是ztree存放在页面的元素id,比如div的id // treeObj就是ztree对象 var treeObj = $ ...

  9. 《剑指offer》查找二维数组内元素 c++

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. cl ...

  10. bootstrap-table的一些配置参数例子

    $('#reportTable').bootstrapTable({ method: 'post', url: '/qStock/AjaxPage', dataType: "json&quo ...