自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 输出杨辉三角

11 11 2 11 3 3 11 4 6 4 1根据它的性质,每行行首是1,每行行尾也是1,除此外其余数都为其上一列的数加上上一列的数的前面那个数。可以写出程序。#include <stdio.h>int main(void){ int n = 0; printf("请输入你想输入的行数\n"); scanf("%d", &n); int array[n][n]; for (int .

2020-07-03 16:20:39 27

原创 6-13 折半查找 (15分)

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。函数接口定义:int Search_Bin(SSTable T, KeyType k)其中T是有序表,k是查找的值。裁判测试程序样例:#include <iostream>using namespace std;#define MAXSIZE 50typedef int KeyType;typedef struct

2020-07-02 21:00:34 36

原创 旋转链表

给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-&gt

2020-07-01 14:41:37 21

原创 两数相加||

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7一种很烂的方法,将l1,l2翻转,每个结点加起来,得到的.

2020-07-01 13:39:32 20

原创 习题3.5 求链表的倒数第m个元素 (20分)

请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素。函数接口定义:ElementType Find( List L, int m );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode L

2020-06-30 18:22:53 55

原创 回文链表

编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true可以再建一个反向的链表,不过这样还不如直接用数组。方法1bool isPalindrome(struct ListNode *head){ int array[10000000] = {0}; int i = 0; while (head) { i++; ar

2020-06-29 12:45:25 21

原创 删除排序链表中重复元素

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3照例使用三个指针来struct ListNode* deleteDuplicates(struct ListNode* head){ if (head == NULL || hea

2020-06-28 14:18:05 36

原创 6-10 阶乘计算升级版 (20分)

本题要求实现一个打印非负整数阶乘的函数。函数接口定义:void Print_Factorial ( const int N );其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。裁判测试程序样例:#include <stdio.h>void Print_Factorial ( const int N );int main(){ int N; scanf("%d", &

2020-06-28 10:44:39 39

原创 K个一组翻转链表

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4-&gt

2020-06-27 22:05:40 43

原创 从链表中删去总和值为0的连续结点

给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。你可以返回任何满足题目要求的答案。(注意,下面示例中的所有序列,都是对 ListNode 对象序列化的表示。)示例 1:输入:head = [1,2,-3,3,1]输出:[3,1]提示:答案 [1,2,1] 也是正确的。示例 2:输入:head = [1,2,3,-3,4]输出:[1,2,4]示例 3:输入:h

2020-06-26 18:50:16 106

原创 删除链表中的(非末尾)节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], node = 1输出: [4,5,9]解释: 给定你链表中值为

2020-06-26 16:37:16 38

原创 有序链表转换二叉搜索树

给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 9 / /-10 5方法1把链表变成二叉树,注意,他是一个升序的链表,我们也就不用再翻转了。如果是三个结点的话,我们

2020-06-25 19:53:09 39

原创 返回倒数第 k 个节点

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。没错,我叕用了一种比较暴力(傻)的方法方法1int kthToLast(struct ListNode* head, int k){ int length = 0; struct ListNode *p = head; while (p)

2020-06-25 10:51:28 36

原创 链表相交

给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,

2020-06-24 21:46:16 36

原创 分割链表

编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8题目的意思就是把小的放前面,大的放后面,顺序没有规定。/** *

2020-06-23 20:29:42 31

原创 快慢指针

给定一个有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环,其尾部连接到第一个节点

2020-06-22 14:40:15 36

原创 LeetCode奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6->

2020-06-21 18:05:22 24

原创 两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接: 力扣struct Li

2020-06-20 16:49:31 30

原创 编写程序detab

编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设制表符终止位是固定的,比如每间隔n列就会出现一个制表符终止位。n应该作为变量还是常量呢?题意是说,我们每一个输入如果不等于8个而且下一个字符是\t,就用空格补到8,保证tab后所有输入应占TAB倍数的位子。比如abc制表符d,那abc后面应该是5个空格保证占8位,第9位是d#include<stdio.h>#define TAB 8int main(void){ int

2020-06-19 16:48:43 27

原创 编写一个程序,打印输入中单词长度垂直方向的直方图

#include<stdio.h>#define MAXHIST 15#define MAXWORD 11#define IN 1#define OUT 0int main(void){ int c; int i; int j; int nc = 0;//一个单词字母的个数 int state = OUT; int maxvalue; int ovflow = 0; int wl[MAXWORD] = {

2020-06-18 14:30:31 19

原创 C语言中的声明、定义、初始化

声明变量声明规定了变量的类型和名字1基本形式任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。2说明符(一个或多个) 声明表达式列表3变量声明int a;unsigned int a;函数声明int max()一个返回值为int类型的函数指针声明int *pp是int*型如果按上一句,p是int*类型,那么有意思的是为什么指针声明不是int* a;The syntax of the declaration for a

2020-06-14 15:05:47 112

原创 存储类别与链接

存储类别与链接在我们写程序时,所以的程序中使用的数据都是储存在内存中的。从硬件层面来看,被储存的每一个值都占用一定的物理内存。C语言把这样一块内存称为对象(object)对象可以储存一个或多个值。 一个对象可能并未储存实际的值,但是它在储存适当的值时一定具有相应大小。(这里的对象不是指的面向对象编程的对象)我们需要一种方法来访问内存中的对象。int entity=3;这个声明创建了一个名为entity的标识符(identifier)。在这种情况下,标识符可以用来指定(designate)

2020-06-14 14:22:27 37

原创 习题3.14 另类堆栈 (15分)

在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?函数接口定义:bool Push( Stack S, ElementType X );ElementType Pop( Stack S );其中Stack结构定义如下:typedef int Position;typedef struct SNode *PtrToSNode;struct SNode { ElementType *Data; /*

2020-06-10 21:09:47 184

原创 7-3 树的同构 (25分)

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结.

2020-06-04 18:24:28 110

原创 7-2 一元多项式的乘法与加法运算 (20分)

设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例:15 24 -25 22 30 21 -

2020-06-03 18:34:33 48

原创 7-1 最大子列和问题 (20分)

给定K个整数组成的序列{ N​1, N2, …, N​K},“连续子列”被定义为{ N​i, N​i+1​​ , …, N​j },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试基本正确性;数据2:102个随机

2020-06-02 11:52:52 126

原创 6-12 二叉搜索树的操作集 (30分)

本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );其中BinTree结构定义如下:typed

2020-06-01 19:18:01 95

原创 6-11 先序输出叶结点 (15分)

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数PreorderPrintLeaves应按照先序遍历

2020-06-01 15:14:22 133

原创 6-10 二分查找 (20分)

本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线性表,其中ElementType元素可以

2020-06-01 14:51:55 85

原创 6-9 二叉树的遍历 (25分)

本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;st

2020-06-01 13:41:24 255

原创 6-8 求二叉树高度 (20分)

本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数返回给定二叉树BT的高度值。裁判测试程序样例:#include <stdio.h&gt

2020-05-31 13:35:25 143

原创 6-7 在一个数组中实现两个堆栈 (20分)

本题要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:typedef int Position;struct SNode { ElementType *Data; Posi

2020-05-30 14:06:52 120

原创 6-6 带头结点的链式表操作集 (20分)

本题要求实现带头结点的链式表操作集。函数接口定义:List MakeEmpty();Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data;

2020-05-30 08:36:42 72

原创 6-5 链式表操作集 (20分)

本题要求实现链式表的操作集。函数接口定义:Position Find( List L, ElementType X );List Insert( List L, ElementType X, Position P );List Delete( List L, Position P );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;}

2020-05-29 16:46:30 118

原创 6-4 链式表的按序号查找 (10分)

本题要求实现一个函数,找到并返回链式表的第K个元素。函数接口定义:ElementType FindKth( List L, int K );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List;L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回ERRO

2020-05-29 16:03:59 208

原创 6-3 求链式表的表长 (10分)

本题要求实现一个函数,求链式表的表长。函数接口定义:int Length( List L );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List;L是给定单链表,函数Length要返回链式表的长度。裁判测试程序样例:#include <stdio.h>#include

2020-05-29 10:53:24 124

原创 6-2 顺序表操作集 (20分)

本题要求实现顺序表的操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { Eleme

2020-05-29 10:08:12 71

原创 6-1 单链表逆转 (20分)

本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode List; /* 定义单链表类型 */L是给定单链表,函数Reverse要返回被逆转后的

2020-05-28 13:38:08 186

原创 习题7-8 字符串转换成十进制整数 (15分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。输入格式:输入在一行中给出一个以#结束的非空字符串。输出格式:在一行中输出转换后的十进制数。题目保证输出在长整型范围内。输入样例:±P-xf4±1!#输出样例:-3905#include <stdio.h> #include<math.h>i

2020-05-27 22:36:17 83

原创 习题9-5 通讯录排序 (20分)

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。输入格式:输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。输出格式:按照年龄从大到小输出朋友的信息,格式同输出。输入样例:3zhang 19850403

2020-05-27 21:05:18 153

提示
确定要删除当前文章?
取消 删除