数据结构与算法(C语言描述)
紧跟大帅帅(我的程序老师)的步伐,和我一起琢磨吧,宝贝
勇敢*牛牛
CDND博客专家认证,JavaScript领域内容优质创作者 51TOC特邀创作者
展开
-
输出n∗n的蛇形矩阵
输出n∗n的蛇形矩阵题目描述给你一个整数n,输出n∗n的蛇形矩阵。 输入描述: 输入一行,包含一个整数n 输出描述: 输出n行,每行包含n个正整数,通过空格分隔。1<=n<=1000示例输入4输出1 2 6 7 35 8 13 49 12 1410 11 15 16#include"stdio.h"int main(){ int n,a[1000][1000]; int i,j,k=1,w=1,x=1; scanf("%d",&n);原创 2021-12-31 11:02:58 · 2552 阅读 · 0 评论 -
牛村到羊村路上牛可乐和牛能总共消耗了多少千克的水
牛村到羊村路上牛可乐和牛能总共消耗了多少千克的水?原创 2021-12-24 10:25:01 · 457 阅读 · 2 评论 -
质数数量的求解
质数(prime number)又称素数,有无限个,质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。原创 2021-12-04 15:00:54 · 497 阅读 · 0 评论 -
win10读文件时C语言申请内存空间最大能申请多少个
读大量文件时,只能读出前面的一半???win10C语言申请内存空间最大能申请多少个???malloc是开辟一个连续的空间,可能你电脑里没有连续的5M空间存在,所以会崩溃,就比方你开一个10000*10000的int型数组页可能会报错一样。原创 2021-12-02 23:13:22 · 664 阅读 · 0 评论 -
广度优先搜索算法BFS
定义循环队列void BFS(AdjList *g,int vi){ int i,v; int Queur[MAX],front=rear=0;//定义循环队列 EdgeNode *p; printf("(%d,",vi); printf("%c)",g->adjlist[vi].data); visited[vi] = 1; rear = (rear+1)%MAX;/*尾指针后移并且将vi入队*/ Queur[rear] = vi; while(front != rear){原创 2021-05-23 22:14:19 · 186 阅读 · 0 评论 -
深度优先搜索算法DFS
递归算法结合上篇邻接表存储图int visited[20] = {0};void DFS(AdjList *g,int vi){ EdgeNode *p; printf("(%d,",vi); printf("%c) ",g->adjlist[vi].data); p = g->adjlist[vi].firstedge; visited[vi] = 1; // 全局数组标记被访问过 while(p!= NULL){ if(visited[p->adjvex] ==原创 2021-05-23 22:12:23 · 112 阅读 · 0 评论 -
图的邻接表算法
邻接表是图的一种顺序存储与链式存储的结合的存储方式。他包括两种结点结构,顶点表和边表。顶点表的结点结构由顶点域和指向第一条邻接边的指针域。(建议多读几遍熟悉逻辑)边表结点由邻接点域和指向下一条邻接边的指针域构成。也就是以下结构体的嵌套** ↓ **#define MAX 100typedef char VertexType;typedef struct node{/*定义边表结点*/ int adjvex;//邻接点域 struct node *next;//指向下一个邻接点域的指针域原创 2021-05-23 11:08:31 · 1647 阅读 · 1 评论 -
将顺序二叉树存储序列转化为链式存储序列-c语言
将顺序二叉树存储序列转化为链式存储序列- 题目描述:将给定顺序二叉树存储序列转换为链式二叉树存储序列显示char data[13] = {‘0’,‘A’,‘B’,‘C’,‘0’,‘D’,‘E’,‘F’,‘0’,‘0’,‘G’,‘H’,‘0’,‘I’}题解思路:首先理解二叉树的顺序存储结构原理,首先根节点的编号(下标)为1的是根节点,左孩子下标为2i,右孩子是2i+1。在二叉树的链式存储中是按照先序输出的序列输出的,那么思路一:二叉树的先序输出序列(包括‘0’)就是链式的输入输入序列。思路二原创 2021-05-16 17:22:25 · 2956 阅读 · 0 评论 -
图的邻接矩阵算法
无向图的邻接矩阵是关于左上右下对角线对称的,有向图不一定对称先得理解矩阵描述的图,或者明白图的矩阵描述概念。图的邻接矩阵存储结构#define MAX 100typedef struct{ char vexs[MAX]; //顶点表 int arc[MAX][MAX];//邻接矩阵,也就是边的关系表 int numVertexes,numEdges;//图中的定点数和边数 }MGaph;根据邻接矩阵的定义,可得到建立图的邻接矩阵算法。算法描述:首先得到图的顶点数和边数、然后按照顶.原创 2021-05-15 08:31:16 · 3051 阅读 · 1 评论 -
图-典型的非线性结构
图的定义:Graph:是由顶点的有穷非空集合和顶点之间边的集合组成,用二元组表示G(V,E)V是顶点集合,E是G中边的集合。博主角度理解:线性表中把数据元素叫做元素,树中叫结点,在图中的数据元素我们就叫顶点。线性表中可以没有数据元素,成为空表,树中可以没有结点,叫做空树,但是对于图,不允许没有顶点,因为在定义中,若V是顶点的集合,则强调了顶点集合V有穷非空。(那幅牛吃草的故事,告诉我们空白纸不能算作一幅画,延伸到一个没有顶点的集合,构不成一个图)在线性表中,相邻的数据元素有线性关系,树形原创 2021-05-05 21:43:23 · 443 阅读 · 1 评论 -
计算各个位数不同的数字个数
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10^n 。示例:输入: 2输出: 91解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。思想:拿到算法题,别想一口吃个大胖子的想法来,首先分析题目要求,找规律,等吧大问题切成最简单的小块,要是还是不会,就在往小了细分!!!解析:其实这道题分析到最后很简单,只要懂点排列组合OK,那么我们来分析:当n=1时,也就是只有一位数,选择的数字原创 2021-05-04 09:07:50 · 676 阅读 · 0 评论 -
顺序串(3)— KMP模式匹配算法-1(补充)
补充上一篇“串”笔记博文:字符串的朴素模式匹配算法低效在哪?主串是S=“abcdefgab”,匹配串T=“abcdex”用前面的朴素模式匹配算法的话,前5个字母两串完全相等,直到第六个时‘f’与‘x’不相等:再按照这个算法的话,结合上图流程,我们会知道其实T串“abcdex”的首字母‘a’与之后面的‘bcdex’中的任何一个字符均不相等(KMP算法的关键思想),那你想‘a’不与自己后面的子串中的任意一个字符相等,那么对于T中的‘a’则不可能与串S中的第2位到第5位的字符相等。那么这个朴素模式原创 2021-05-02 09:51:43 · 187 阅读 · 0 评论 -
二叉树的创建与基本操作
二叉树的性质我就不多说了,毕竟是笔记,直接上一点干货(代码操作)根据二叉树的性质,建立一个二叉树存储结构。typedef char DataType;/*二叉树存储结构类型*/ typedef struct tonde{ DataType data; struct tonde *lchile,*rchile;//左孩子,右孩子指针}BT; 创建一个二叉树,按二叉树带空指针的先序依次输入(解释:因为在创建时我要从根结点开始建立,并且返回这个树根结点,“树高万丈不忘根,人若辉煌不忘本嘛”原创 2021-04-28 23:38:15 · 1654 阅读 · 0 评论 -
字符串中有多少个回文子串。
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:“abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:“aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”算法思路:求一个字符串中有多少个回文子串,子串必须是连续的,子序列可以不连续,那我定义dp[i][j]:表示字符串s从下标i到j是否是回原创 2021-04-27 21:39:42 · 2170 阅读 · 2 评论 -
删除有序数组重复项
双指针解删除有序数组中的重复项问题描述给你一个有序数组nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。解题思路: 因为数组是排序的,只要是相同的肯定是原创 2021-04-18 23:14:43 · 855 阅读 · 2 评论 -
链队列
一个链队列需要头尾指针才能确定,为了操作简单,在队头元素前附加一个头结点,指针初始化都指向头结点。链存储的类型#include <malloc.h>typedef int DataType;typedef struct qnode{//链队列存储类型 DataType data;//结点 struct qnode *next;//结点的指针域 }qnode,*Qnode;typedef struct queue{//结构体嵌套 Qnode front; Qnode .原创 2021-04-11 18:28:28 · 134 阅读 · 0 评论 -
循环队列
先进先出原则循环队列的存储类型#define MAXSIZE 8typedef int DataType;typedef struct{ DataType data[MAXSIZE]; int front;//指向队头 int rear;//指向队尾}SeqList;初始化void InitList(SeqList *list){ list->front = list->rear = 0;//初始化队列 printf("初始化成功\n"); }入队(尾.原创 2021-04-11 17:55:27 · 108 阅读 · 0 评论 -
顺序串(2)
插入子串操作int StrInsert(String *S,String *S1,int pos){//从第几位起插入 int i; if(pos>S->len+1){ printf("插入位置出现错误\n"); return 0; } if(S->len+S1->len > MAXLEN){ printf("两串长度超过存储空间\n"); return 0; }//以上考虑的是程序的健壮性 for(i=S->len-1;i>=.原创 2021-04-11 17:32:43 · 214 阅读 · 4 评论 -
顺序串(1)
顺序串的存储结构/*顺序串的存储结构 */ typedef struct{ char chars[MAXLEN];//储存字符数组 int len;//存储串的实时长度 }String;创建顺序串为什么不用scanf呢,因为scanf函数读到空格的时候就会结束输入,但是在串的定义中,空格也是一个字符。读者可自行测试下列用例:char array[10]; scanf("%s",array); rintf("%s",array);/*串创建的操作*/ void Creatstr.原创 2021-04-10 16:50:01 · 253 阅读 · 0 评论 -
栈(顺序栈)
栈:last in first out作为一种特殊的线性表,他只能在栈顶进行插入和删除元素通过一个指向栈顶的变量来记录栈顶元素位置#define MAXLEN 100typedef int DataType;typedef struct { DataType data[MAXLEN]; int top;//top 为指向栈定元素所在位置 }SeqStack;初始化让top指针与数组下标对应,那么他在空栈的时候可以为-1;void InitStack(SeqStack *L){.原创 2021-04-01 09:41:48 · 148 阅读 · 0 评论 -
门牌制作
题面思路:暴力遍历1——2020个数字,然后判断每一位数字里面包含的2并计数!代码#include <stdio.h>#include <stdlib.h>#define N 2020/*函数化编程思想*/int fun(int n){ int m = n,sum = 0; while(m != 0){ if(m%10 == 2){ sum++; } m /=10; }return sum;}int main() { i..原创 2021-03-31 13:23:56 · 203 阅读 · 0 评论 -
数字字符串转int型
算法思想:将单个的字符提出来减去‘0’,因为printf("%d",'7'-'0');这样就会产出一个int类型的7,;再通过循环相加即可得到一个整型数字;#include <stdio.h>long fun(char *str){ if(str == NULL){ return 0; } long a = 0; while(*str != '\0'){ a = a*10 + *str-'0'; str++; } return a;} int mai.原创 2021-03-25 15:36:26 · 744 阅读 · 1 评论 -
移动一维数组的内容
描述:若数组中有n个整数,要求把下标从0到p(含p,p<=n-1)的元素平移到数组的最后举例:一维数组:1,2,3,4,5,6,7,8,9,10,p的值为3移动后:5,6,7,8,9,10,1,2,3,4算法思想:原创 2021-03-25 10:21:58 · 2478 阅读 · 0 评论 -
求数字的后n-1位的数
描述 :w 是一个大于10的整数,若 w 是 n(n>=2)位的整数,函数求出来w的低n-1位的数作为函数值返回举例:w 值为5923,则函数返回 923算法思路:-判断当前的整数的位数,记录 **(位数*10)**例如:如果w有三位,那么记录time = 100;再根据这个time计算后(n-1)位,即:w-(w/time)*time:代码实现:#include <stdio.h>#include <math.h>int main() { i..原创 2021-03-23 17:31:28 · 3329 阅读 · 0 评论 -
求一个整数的所有数位之和
求一个整数的所有数位之和例如输入12,得到结果为 3算法思想: 首先得把每一位给剥离出来,那么如何剥离呢?首先,咋们学过取余 n%10,可以把最后一位给分离出来,但是这才将最后一位给分离出来,那么下一位如何获取呢,好!如果我在将 n = n/10; 这时候呢,n 变为了多少,没错如果是 n = 98,经过 n = n/10;此时 n 就是 9;那好我再取余,n%10就是9。我们要知道如果说一个个位数除以10 是0;那么综上,我可以建立一个while循环将各个位数剥离出来相加!代码实现int原创 2021-03-22 22:35:28 · 6340 阅读 · 1 评论 -
单链表——所有操作集合
单链表,插入,删除,访问原创 2021-03-21 22:18:24 · 342 阅读 · 3 评论 -
线性表的链式存储
单链表:一种逻辑连续但物理地址不一定连续的线性存储结构;多多读读书上的对单链表的文字性描述;typedef int DataType;typedef struct linkList{ DataType data; //数据域 struct linkList* next; //指针域 }LinkList,*List;包括data数据域和next指针域;List 相当于 struct linkList * ,指针类型;链表也分带头结点的链表和不带头结点的链表;通常用一个“头指针”来原创 2021-03-20 21:34:20 · 314 阅读 · 0 评论 -
牛牛学数列
输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+…+1/(1-3+5-…+2n-1)的值原创 2021-03-18 09:10:27 · 943 阅读 · 0 评论 -
线性表的顺序存储
线性表的顺序存储你好! 这是我第一次使用博客记录我学习的生活,废话不多说,在你基本了解C语言和或者对数组,指针,结构体有比较好的一个掌握的话,那么你学习第一章后,理解一下顺序表概念,就从阿牛理解的角度阐述和操作这个顺序表(静态)。下面展示我的 相关代码片。1、顺序表类型的定义#include <stdio.h>#include <stdlib.h>#define SIZE 100typedef int DataType;typedef struct { DataT原创 2021-03-17 22:59:17 · 474 阅读 · 0 评论