C语言
浅亡
花开花败总归尘,缘来缘去终会散。
展开
-
java,C++,C,python:九九乘法表
编写九九乘法表九九乘法表可以很好地体现循环的思想,我们一直使用的是左下三角的形式,所以,编程的时候也采用了左下三角的形式。java语言编写九九乘法表代码如下:package first;public class first{ public static void main(String args[]){ System.out.println("\t\t\t九九乘法表(左下...原创 2019-08-01 21:12:20 · 280 阅读 · 0 评论 -
C语言学习笔记:动态数组
动态数组数组是C语言中的很重要的一种构造类型,最初我们学习的都是静态数组,但是,静态数组有着自己难以改变的缺点——数组长度固定。一般在静态数组定义后,系统就会为其分配对应长度的连续的专有内存空间,可是,我们都知道,不同的运行样例,所需要的数组长度是不一样的,为了所有样例都可以执行,一般我们会将数组长度设置为一个很大的值,比如:我一般都是借助宏定义直接声明1000,这个长度是可以满足我日常所需的。虽然这种方式,满足了一般运行的要求,但是它极大的浪费了内存。于是我们引出了动态数组的概念,顾名思义,“动态”原创 2020-11-16 23:20:29 · 52134 阅读 · 8 评论 -
C语言学习笔记:C指针
指针C语言是我接触的第一门编程语言,当时学习C语言的时候,遇到的第一个难点就是指针。我觉得大多数人在学习C指针的时候都或多或少有过困惑,最近正好在复习C语言,对指针的理解由加深了,现在来总结一下。地址和指针变量的内容和地址在提到了指针的时候,我们不可避免的会涉及到地址和指针的关系。我们在学习计算机基础的时候就知道,计算机中的所有数据都是存储在内存中的存储单元的,存储单元说白了就是内存中的一个字节。注意:不同类型的数据所占用的字节数是不一样的举例:那么我们刚才提到的地址和存储单元有什么关系原创 2020-11-15 10:31:28 · 236 阅读 · 0 评论 -
C语言:归并排序
归并排序归并是将两个或多个存序记录序列合并成一个有序序列。一般来说,一次对几个有序记录进行归并,就称为几路归并排序。以二路归并排序为例,其基本方法如下:(1) 将 n 个记录看成是 n 个长度为 1 的有序子表。(2) 将两两相邻时有序序列进行归并。(3) 重复执行步骤 (2) 直到归并成一个长度为 n 的有序表如下所示:C语言代码//二路归并#include <stdio.h>int MergeSort(int A[],int B[],int low,int high)原创 2020-07-20 18:06:31 · 942 阅读 · 1 评论 -
C语言:堆排序
堆排序基本概念:(1)n个关键字序列L[1~n]称为堆,当且仅当该序列满足:①L(i)<=L(2i)&&L(i)<=L(2i+1),则称该堆为小根堆②L(i)>=L(2i)&&L(i)>=L(2i+1),则称该堆为大根堆在排序过程中将序列视为一棵完全二叉树的顺序存储结构。(2)堆的初始化对所有具有双亲结点含义编号从大到小(n/2~1)做如下调整:①若孩子结点都小于双亲结点,则不做调整②若存在孩子结点大于双亲结点,则将最大的孩子结点原创 2020-07-20 16:01:32 · 806 阅读 · 0 评论 -
C语言:简单选择排序
简单选择排序简单选择排序是选择排序的一种,其基本思想是将每一趟在后面的n-i+1个待排序的序列中选取关键字最小的元素,作为有序子序列中的第i个元素,直到n-1趟完成,待排序序列中只有一个元素,即得到最终的排好序的序列。(一趟排序会将一个元素放在最终的位置上)C语言代码#include<stdio.h>void SelectSort(int A[],int n); int main() { int A[1024],n; printf("请输入要输入的元素个数:"); scan原创 2020-07-20 15:16:33 · 7392 阅读 · 1 评论 -
C语言 快速排序
快速排序快速排序通过分而治之的策略,交换两个不相邻的元素,一次可以消去多个逆序,效率极高。基本思想在待排序的序列L[1~n]中,任意取一个元素pivot作为“枢轴”,凡是关键字小于枢轴的记录,均移动到该记录之前,关键字大于枢轴的记录,均移动到该记录之后,即对无序的记录进行“以此划分”,之后分别对分割所得的两个子序列“递归”调用进行快排。通过一趟排序将待排序序列划分为具有如下特点的两部分:一次划分会将一个元素pivot防止在它最终的位置上。算法实现的思路初始化标记low为划分部分第一个元原创 2020-07-20 14:26:23 · 602 阅读 · 0 评论 -
C语言:冒泡排序
冒泡排序冒泡排序是交换排序的一种,其基本思想是:假设待排序的序列长度为n,从后往前(从前往后)两两比较相邻元素的值,若为逆序(当i<j时,A[j]>A[i],称逆序),则交换他们直到序列比较结束。一次冒泡会将一个元素放在它最终的位置上,以后比较时不用比较该元素。C语言代码//使用冒泡排序进行升序排列#include <stdio.h>void BubbleSort(int A[], int n);int main() { int A[1024],n; prin原创 2020-07-20 13:56:34 · 316 阅读 · 1 评论 -
C语言:希尔排序
希尔排序希尔排序是插入排序的一种,也称作缩小增量排序,其基本思想是:先将待排序的序列分割成d个形如L[i,i+d,i+2d,…,i+kd]的特殊子表,分别进行直接插入排序,当整个表中的元素呈"基本有序时",再对全体记录进行一次直接插入排序。最终得到排好序的序列。d的选取:手动演示希尔排序的过程:取待排序序列为: 46 55 13 42 94 17 5 70实验代码//使用希尔排序进行升序排列#include <stdio.h>int ShellInsert(in原创 2020-07-20 13:25:15 · 1137 阅读 · 0 评论 -
C语言: 折半插入排序
折半插入排序折半插入排序是插入排序的一种情况,其效率比直接插入排序,其实现过程和折半查找类似。C语言代码//使用折半插入排序进行升序排列#include<stdio.h>void BinsertSort(int A[],int n);int main() { int A[1024],n; printf("请输入要输入的元素个数:"); scanf("%d",&n); printf("\n请输入要排序的序列:\n"); for (int i=1; i<=原创 2020-07-20 12:47:08 · 968 阅读 · 0 评论 -
C语言:直接插入排序
直接插入排序直接插入排序是插入排序的一种,插入排序是每次将一个待排序的序列插入到一个前面已经排好序的子序列当中。直接插入排序的算法思想如下:(1)查找出L[i]在L[1~i-1]中的插入位置k;(2)将L[k~i-1]中所有的元素全部向后移一个位置;(3)将L[i]复制到L[k]中。手动显示一下这个过程:假设有一个待排序序列 : 3 6 7 2 5 1 4趟数哨兵序列163 6 7 2 5 1 4273 6 7 2 5 1 432原创 2020-07-20 12:11:07 · 11296 阅读 · 6 评论 -
栈的应用:中缀表达式转后缀表达式
中缀表达式转后缀表达式在学习数据结构的时候,我们知道,栈有很多的应用,其中比较常见的一个就是中缀表达式转后缀表达式问题。中缀表达式转后缀表达式的算法思想:(1)数字:直接加入后缀表达式(2)运算符:A.若为’(’ ,入栈 ;B.若为’)’,则依次把栈中的运算符加入后缀表达式,直到出现 ‘(’,并从栈中删除’(’;C.若为’+’,’-’,’*’,’/’ ,则分为以下情况讨论:a.栈空:入栈;b.栈顶元素为’(’:入栈;c.高于栈顶元素优先级:入栈;d.若不属于以上情况,则依次弹出栈顶运算原创 2020-07-14 19:17:54 · 956 阅读 · 2 评论 -
栈的应用:括号匹配
括号匹配在学习数据结构的时候,我们知道,栈有很多的应用,其中比较常见的一个就是括号匹配问题。在使用栈解决括号匹配问题时,其算法思想是:(1)初试一个空栈,顺序读入括号;(2)若是右括号,则与栈顶元素进行匹配,分以下两种情况:①匹配:弹出栈顶元素并进行下一个元素②不匹配:该输入序列不合法(3)若是左括号,则压入栈中;(4)若是全部元素遍历完毕,栈中非空则序列不合法。注意:以上标识重点的部分,指出了括号匹配时不合法的两种情况。注意:以下代码只能检测 ( ) 和 [ ] 括号代码如原创 2020-07-14 18:52:26 · 1025 阅读 · 1 评论 -
单链表的合并(交叉合并,升序合并)
单链表的合并单链表的合并情况有如下几种:(1)Length(L1)=Length(L2)(2)Length(L1)>Length(L2)(3)Length(L1)<Length(L2)单链表的交叉合并(交叉合并的重点在交叉,不保证合并后的数据是有序的)代码如下:#include<stdio.h>#include<malloc.h>typedef struct LNode { int data; struct LNode *next; //指针原创 2020-07-13 20:24:53 · 2530 阅读 · 1 评论 -
头插法、尾插法建立链表
单链表的建立链表是线性表的一种,一般来说链表就是一系列的存储数据元素的单元通过指针串接起来形成的,常见的链表是单链表和双链表,一个域用于数据元素的存储,另一个或两个域是指向其他单元的指针。对于单链表来说,指针域是一个,指向当前节点的后继节点;双链表来说,一个指针域指向当前节点的后继节点,另外一个指针域指向当前节点的前驱节点。本文只讨论单链表的情况。单链表的建立分为头插法和尾插法两种。如下:实现代码如下://头插法和尾插法建立链表,整型为例#include <stdio.h>#in原创 2020-07-13 13:14:38 · 1689 阅读 · 0 评论 -
C语言探究:C语言缓冲区
C语言缓冲区C语言中缓冲区是一个很重要的知识点,当初了查了点资料,觉得下面这篇文章写的不错,为了省事,就选择了直接转载。不过主要是学习知识点和运用在实际编程中,所以是不是自己写的都还好啦。 ...转载 2019-10-25 22:18:57 · 4637 阅读 · 0 评论 -
C语言:循环函数部分的简单编程题
循环函数部分的简单编程题大概是刚开始学些,所以有的同学对编程题比较发憷,其实,这些题都比较简单,所以,我会直接给出题和解题代码(其中有一部分题是来源于网上的)。如果有拓展要求的话,我会直接给出最终代码,可以在此基础上修改,然后得到基本题的代码。编程1:求组合数C(n,m)即:求从给定个数的n个元素中取出m个元素的方法数。要求:(1)利用循环(2)n,m的值要求从键盘输入(3)输出格...原创 2019-09-28 23:29:43 · 2905 阅读 · 0 评论