- 博客(33)
- 收藏
- 关注
原创 2.3.1 设计一个递归算法,删除不带头结点的单链表L中所有值为x的节点
设计一个递归算法,删除不带头结点的单链表L中所有值为x的节点//定义一个单链表typedef struct LNode { ElemType data; struct LNode* next;}LNode, * LinkList;//初始化单链表bool InitList(LinkList& L) { L = NULL; //空表,防止脏数据 return true;}void delX(LinkList& L,ElemType x) { LNode* p; if
2022-04-13 20:40:22 1386
原创 循环单链表
循环单链表循环单链表的定义循环链表的初始化判表空判断结点p是否为循环单链表的表尾结点循环单链表的定义typedef struct LNode { ElemType data; struct LNode* next;}LNode,*LinkList;循环链表的初始化bool InitLIst(LinkList& L) { L = (LNode*)malloc(sizeof(LNode)); if (L == NULL) return false; L->next = L
2022-04-05 21:01:16 365
原创 双链表的相关操作(定义,后插,删除,遍历)
双链表的相关操作双链表的定义双链表的插入(后插)双链表的删除主函数双链表的定义typedef struct DNode { ElemType data; struct DNode* prior, * next;}DNode, * DLinklist;//----------双链表的初始化(带头结点)----------bool InitDLinkList(DLinklist& L) { L = (DNode*)malloc(sizeof(DNode)); //分配一个头结点 if
2022-04-05 20:44:51 903
原创 单链表的相关操作(定义,初始化,插入,删除,查找,求表长)
单链表的相关操作定义一个单链表不带头节点的单链表带头结点的单链表按位序插入(带头结点)按位序插入(不带头结点)指定结点的后插操作指定结点的前插操作按位序删除(带头结点)定义一个单链表typedef struct LNode { ElemType data; struct LNode* next;}LNode, * LinkList;不带头节点的单链表bool InitList(LinkList& L) { L = NULL; //空表,防止脏数据 return true;}b
2022-04-03 21:03:09 1538
原创 2.2.10 【2010统考真题】设将n(n>1)个整数存放到一维数组R中。
【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1…Xn-1)变换为(Xp,Xp+1…Xn-1,X0,…Xp-1)。要求:1)给出算法的基本设计思想。2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。3)说明你所设计算法的时间复杂度和空间复杂度。算法思路:主要的思路和2.2.8差不多都是先分段逆置再整体逆置的办法实现。
2022-03-31 20:57:36 5055 5
原创 2.2.9 线性表(a1,a2,···,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素
线性表(a1,a2,···,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序。思路:因为题目要求用最少的时间,所以考虑二分查找。int Search(SeqList& L, int x, int low, int high) { int t; int min; while (low < high) { mid = (low + high)
2022-03-30 19:42:44 1422
原创 2.2.8 已知在一维数组A[m + n]中依次存放两个线性表(a1, a2, a3, a4....am)与(b1, b2, b3...bn)。试写函数将两顺序表的位置互换
已知在一维数组A[m + n]中依次存放两个线性表(a1, a2, a3, a4…am)与(b1, b2, b3…bn)。试写函数将两顺序表的位置互换,即将(b1, b2, b3…bn)放在(a1, a2, a3, a4…am)前面思路1:既然是数组,我想的是把数组元素对换,比如:A[0](a1)与A[m](b1)对换,但这样就要考虑一对一对调之后就会有元素剩下的情况思路2:把bn元素一个个插到a1前面,这样太麻烦了思路3(参考算法思想):void Reverse(DataType A[],in
2022-03-30 18:47:15 1993 6
原创 2.2.7 将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表思路1:遍历两个顺序表L0,L1,把L1中的元素依次插入到L0中。(插入每次都要把后面的元素后移,时间复杂度高)思路2:同时遍历两个元素并比较,依次存放到第三个顺序表L2中。...
2022-03-29 21:08:35 907
原创 2.2.5 从顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行
从顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行这题跟前两题很像,上一题我“误打误撞”的那个思路就刚好适用这题void DelST(Sqlist& L, Elemtype s, Elemttype t) { int j = 0; if (s < t) { for (int i = 0; i < L.length; i++) { if (L.data[i] > s &&
2022-03-27 20:23:09 389
原创 2.2.4 从有序顺序表中删除其值在给定值s与t之间(要求s<t) 的所有元素。若s或t不合理,或顺序表为空,则显示出错误信息并退出运行
从有序顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t) 的所有元素。若s或t不合理,或顺序表为空,则显示出错误信息并退出运行思想:删除s到t之间的元素void DelST(Sqlist& L, Elemtype s, Elemttype t) { int j = 0; if (s < t) { for (int i = 0; i < L.length; i++) { if (L.data[i] > s && L.data[i] &
2022-03-27 20:13:24 1026
原创 2.2.3 对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素
对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素算法思想:按值查找到值为x的数据元素后将后面的元素前移(用两个循环,这样的问题是时间复杂度高了!)void DelX(Sqlist& L) { for (int i = 0; i < n; i++) { if (L.data[i] == x) { for (int j = i; j < n; j++) { L.data[j] = L.data[j
2022-03-25 20:38:14 421
原创 2.2.2 设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)我理解的最简单的算法是遍历顺序表的元素逆置放在新顺序表中,不过这样可能空间复杂度高一点(私心总觉得在原顺序表中操作比较麻烦QAQ)void Reverse(SqList& L, SqList& R) { int j = L.length - 1; for (int i = 0; i < L.length; i++) { R.data[j] = L.data[i]; } j--;}参考了答案的
2022-03-24 20:56:21 2501 1
原创 2.2.1 从顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行
顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:搜索整个顺序表,查找最小值并记住其位置,搜索结束后用最后一个元素填补空出的最小值元素的位置碎碎念:大概的思路跟参考算法差不多,就是第一次实现题目想写一个完整的程序,但其实只需要写个函数就行,但是这样的话我没办法保证自己的代码是正确的,只能说算法思想是一样的。我的代码:函数部分:(代码思路没什么问题,但运行会报错!)int DelMin(SqLis
2022-03-24 20:36:29 1548
原创 动态分配(malloc free)
代码来源于王道数据结构,纯手打,有无错误感谢指出。#include <stdlib.h>#define InitSize 10 //默认的最大长度 typedef struct { int* data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度}SeqList;void InitList(SeqList& L) { //用malloc函数申请一片连续的存储空间 L.data = (in.
2022-03-22 20:27:21 542
原创 第三大的数
题目给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。 此例中存在两个值为 2的数,它们都排第二。在所有不同数字中排第三大的数为 1 。第一次提交因为想用C++的函数所以这
2022-03-16 21:01:12 173
原创 提莫攻击(力扣)
题目在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组 timeS
2022-03-16 20:25:52 186
原创 Product数据库
Product数据库建表创建、使用数据库建表插入数据建表插入数据建表建表插入数据1)找出速度在3.0以下的PC制造商。2)找出价格最高的打印机的相关信息。3)找出速度比任何一台PC都慢的笔记本电脑。4)找出价格最高的产品(PC,笔记本电脑或者打印机)的型号。5)找出价格最低的彩色打印机的制造商。6)找出RAM容量最小而PC中速度最快者的制造商。基与产品的数据库模式,完成下列查询:Product(maker,model,type);PC(model,speed,ram,hd,price);Laptop
2022-03-15 19:45:24 2761
原创 最大连续1的个数
题目给定一个二进制数组 nums , 计算其中最大连续 1 的个数。示例 1:输入:nums = [1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.示例 2:输入:nums = [1,0,1,1,0,1]输出:2提示:1 <= nums.length <= 10^5nums[i] 不是 0 就是 1.第一次提交:(全是感情,毫无技巧)int findMaxConsecutiveOnes(int*
2022-03-14 20:23:40 887
原创 学生-课程数据库
建立学生-课程数据库连接数据库查看数据库创建数据库使用数据库建表Student插入语句建表Course插入语句(注意!会报错!)建表SC插入语句连接数据库mysql -uroot -p查看数据库show databases;创建数据库create database StuClass;使用数据库use StuClass;建表Studentcreate table Student(Sno char(9) primary key,Sname char(20) unique,
2021-10-23 14:43:37 4005
原创 查找(二分查找、顺序查找)
1.针对数组a[8]={-32, 12, 16, 24, 36, 45, 59, 98},键盘输入一个数实现二分查找。两种方法实现:(1)所有代码在一个main函数中;#include<stdio.h>void main(){ int a[8] = { -32, 12, 16, 24, 36, 45, 59, 98 },s, low = 0, high = 7, mid,flag=0; scanf("%d", &s); while(
2021-03-27 14:17:22 187
原创 对产生的10个随机整数(范围10-99)进行排序 (选择排序,冒泡排序,插入排序)
选择排序#include<stdio.h>#include<stdlib.h>#include<time.h>void main(){ int a[10], i, j, k, t; srand(time(0)); for (i = 0; i < 10; i++) { a[i] = rand() % 90 + 1; printf(".
2021-03-27 14:14:50 6849
原创 进制转换(栈)
#include<stdio.h>//#include<malloc.h>typedef int DataType;#define maxsize 64#define N 100000typedef struct{ char Optr[maxsize];//运算符 double Opnd[maxsize];//操作数 int top,topd; //top:运算符栈顶、topd:操作数栈顶}SeqStack;void InitStack(SeqS
2020-10-28 13:58:59 333
原创 单链表操作(头插、尾插、输出、插入、删除、查找、去重、求表长、连接)
#include<stdio.h>#include<malloc.h> //分配一块连续的内存typedef int DataType;typedef char DataType1;typedef struct LNode { DataType1 data; struct LNode* next;}LNode, * LinkList;头插法创建单链表LinkList CreateListHead() //头插法创建单链表{ DataType1 ch; Lin
2020-10-21 14:37:12 386
原创 单链表(头插法和尾插法)
单链表结构体typedef struct LNode { DataType data; struct LNode* next;}LNode,*LinkList;头插法LinkList CreatListHead()//头插法{ for (i = n; i > 0; --i) { p = (LinkList)malloc(sizeof(LNode)); scanf("%d", &p->data); p->next = l->next; l-&
2020-09-28 23:17:46 89
原创 单链表的查找、插入、删除
DataType Locate_List(Sqlist L, int i) { //按位置查找元素 DataType e; if (i<1 || i>Length_List(L)) { printf("输入的位置非法!\n"); return 0; } e = L.data[i - 1]; return e;}int Locate_List(Sqlist L, DataType x) { //按值查找元素 int i = 0; while (i < L.lengt
2020-09-22 16:05:14 494
原创 顺序表的基本运算函数
求表长判表空判表满取表元显示元#include<stdio.h>#define MaxSize 100typedef char DataType;typedef struct { DataType data[MaxSize]; int length;}Sqlist; //struct是原类型名 Sqlist是新类型名int Length_List(Sqlist L) { //求表长 return L.length;}int Empty_List(Sqlist .
2020-09-22 15:44:55 214
原创 字母图形(蓝桥)
问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC数据规模与约定1 <= n, m <= 26。
2020-08-21 08:15:33 246
原创 杨辉三角
#include<stdio.h>int main(){ int n, i, j, a[34][34]; scanf("%d", &n); for (i = 0; i < 2; i++) for (j = 0; j <= i; j++) a[i][j] = 1; for(i=2;i<n;i++) for (j = 1; j <= i-1; j++) { a[i][0] = a[i][i] = 1; a[i][j] = a[
2020-08-20 21:30:11 86
原创 有一封信共3行,每行10个字符。统计其中有多少个大写字母,多少小写字母,多少数字字符。
#include<stdio.h>#include<string.h>void main(){ char str[3][10]; int i=0,j=0,k=0,m,n; for (m = 0; m < 3; m++) for (n = 0; n<11 ; n++) { //注意:“n<11”因为数组末尾有“\0” scanf...
2020-04-13 12:09:16 577
原创 合并两数组
合并两数组程序片段:#include<stdio.h>void main(){ int a[5] = { 2,32,39,47,59 }, b[5] = { 4,9,18,26,42 },c[10], i; for (i = 0; i < 5; i++) c[i] = a[i]; for (i ...
2020-04-09 08:59:29 193
原创 C4996 scanf:This function or variable may be unsafe. / C6031 返回值被忽略.
C4996 scanf:This function or variable may be unsafe.C6031 返回值被忽略问题:在VS2019中直接输入 scanf("…");解决办法:改为 scanf_s("…");项目 → 属性 → C/C++ → SDL检查 → 否...
2020-04-09 08:58:23 603
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人