自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 队列的表示

相关术语:

2022-06-18 22:34:41 203 1

原创 数据结构------栈和递归

递归的定义:1.若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;2.若一个过程直接或间接地调用自己,则称这个过程是递归的过程。例如:递归求n的阶乘int Fact(int n){if(n==0)return 0;elsereturn n*Fact(n-1);}具有递归特性的数据结构与可递归求解的问题...

2022-05-12 08:45:58 309

原创 栈的表示和实现-------链栈的表示和实现

链栈的表示:.链栈是运算受限的单链表,只能在链表头部表示struct stacknode //栈的结点类型{SElemtype data;struct stacknode*next;}Linkstack;Linkstack*S;

2022-04-27 10:52:40 952

原创 栈的表示和实现---------顺序栈操作

顺序栈的表示:#define MAX 100typedef struct{SElemtype*top;//栈顶指针SElemtype*base;//栈底指针int stacksize;//栈可用最大容量}SqStack;图中top - base=2;看似是整数运算,其实是两个指针间位置的相减,得到两个指针间相差多少元素。(前提是这两个指针指向同一个数组)顺序栈的初始化:void CreateStack(SqStack*S)//构建空栈{S->base = (S.

2022-04-25 16:21:49 596

原创 栈的表示和操作的实现---------顺序栈的表示

栈的抽象数据类型定义:

2022-04-19 09:34:12 176

原创 栈和队列定义和特点-------栈和队列的介绍

。栈和队列是两种常用的,重要的数据结构。栈和队列是限定插入和删除只能在“端点”进行的线性表如果问题求解的过程具有“后进先出”的天然特性的话,则求解的算法中也必然需要利用“栈”...

2022-04-17 18:55:35 477

原创 双向链表的实现

双向链表:在每一个结点里面再添加一个指向其直接前驱的指针域prior,这样链表就形成了指向不同的两个链,故称为:双链表双链表的结构定义如下:typedef DoubleNode{Elemtype data;struct DoubleNode*prior;struct DoubleNode*next;}DN;双向链表的特点:双向链表的插入:算法描述:void shuangxiangLinked_List(DN *L,int i,Elemtype e)...

2022-04-16 17:11:16 844

原创 循环链表的实现

循环链表:是一种头尾相连的链表(表中最后一个结点的指针域指向头结点,形成一个闭环)注意:循环链表的优势:带尾指针循环链表的合并:(将Tb合并在Ta之后)算法描述:void Connect(ND*Ta,ND*Tb){//假设Ta,Tb都是非空的单循环链表p = Ta->next;//p存表头结点Ta->next = Tb->next->next;//Tb表头连接Ta表尾free(Tb->next);//释放Tb表头结点Tb-&g.

2022-04-16 15:18:17 437

原创 单链表的基本操作----------头插法/尾插法建立链表

步骤:1.在内存中找开辟一个空间,作为链表的头节点,将头结点滞空具体代码:L = (LinkList)malloc(sizeof(ND));L -> next = NULL;

2022-04-13 01:04:22 4663

原创 单链表基本操作--------删除第i个元素

.删除--------删除第i个结点{算法步骤}代码分析://删除第i个元素的结点void deleteNode(LinkList &L,int i){ND*P; //创建指向ND类型的指针pp = L; //指向头结点int j; //计数器,用于计算访问到的结点数。int e; //变量e用于存放删除结点的数据。while(p&&j<i-1) //判断是否不为空表,和计数点小于要删除的结点的前一个结点{ p.

2022-04-11 15:25:07 6402

原创 单链表的基本操作--------插入结点

插入-------在第i个结点前插入值为e的新结点( 算法步骤)思考:步骤1与步骤2能互换执行吗?先执行步骤2,再执行步骤1?

2022-04-11 14:05:03 1772

原创 单链表基本操作--------按值查找

按值查找-------根据指定数据获取该数据所在的位置(地址)算法分析:while(p&&p->data!=e) //循环条件:p指向data部分的值不等于e 或 p为非空{p = p ->next;j++; //第几个找到}if(p) = e;return j; //找到else return 0; //未找到...

2022-04-10 16:24:44 2112

原创 单链表的基本操作------取第i个元素(取值)

.知识回顾.取第i个元素(取值)但当我们要找的元素超过了表的长度(i = 15)p访问到第六个元素时,判断其next域为NULL则会停止查找。另外,如果像 i = -1 这样的元素是错误的,就不需要查找了。总结步骤:算法描述:...

2022-04-09 19:50:50 3882 4

原创 单链表基本操作的实现

.单链表的的初始化(带头结点的单链表)构造一个空表在内存中找到sizeof(LNode)的空间大小,用malloc分配出来,分配出来以后呢,转换为(LinKList*)类型。(LinKList*)是指向节点类型的指针...

2022-04-07 23:53:25 811

原创 单链表的定义

.线性表的链式存储结构结点链表 .单链表的定义和表示带头的单链表单链表的存储结构每个节点可以看似一个包裹,数据与地址被封装在一起例如,存储学生,学号,姓名,成绩的单链表节点类型定义如下...

2022-04-07 22:56:03 626

原创 调试技巧2

ps:图解里面的栈区与数据结构中的栈没有关系,图解中造成死循环的原因是因为数组地址增长的过程中覆盖到了变量i的地址(高地址)。

2022-01-17 20:03:09 121

原创 调试技巧1

Debug(空间较大) 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release (空间较小)称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。注:linux开发环境调试工具是gdb,后期课程会介绍。只有调成Debug才能进行调试...

2022-01-10 01:49:25 140

原创 什么是压栈传参?

什么是压栈:内存分为:堆区,静态区,栈区每一个函数调用都会在内存的栈区开辟一块空间例如: 绝大多数编译器传参都是从右到左进行的这就很像压栈操作(紫色部分),所以函数传参也叫做压栈操作。大致如下:当Add函数调用完时,Add函数开辟的空间将归还给操作系统,main函数也是如此。连接上一节:所以当结构体过大时,参数压栈的系统开销比较大,所以会导致性能的下降。所以运用传地址的方式比较好。更多的研究可以搜索《函数栈帧的销毁和创建...

2022-01-10 00:02:24 2014

原创 初识结构体

结构是一些值的集合,这些值称为成员变量。结构的个成员可以是不同类型的变量例如描述一个学生:结构体变量访问成员结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。例如:...

2022-01-09 22:44:12 154

原创 指针与数组

既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。例如:结果为:数组地址的等价表现形式(打印结果都为3)有助于指针与数组更深层次的理解...

2022-01-07 21:14:37 547

原创 指针初阶2

概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 这里放在动态内存开辟的时候讲解,这里可以简单提示一下。...

2021-12-15 17:32:01 821

原创 指针初阶1

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向 (points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以 说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址 的内存单元内存指针指针是个变量,存放内存单元的地址(编号)。那对应到代码:总结:指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。 那这里的问题是:(1)一个小的单元到底是多大...

2021-12-08 00:42:14 583

原创 操作符详解3

表达式求值的顺序一部分是由操作符的优先级和结合性决定。 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。整型提升的意义:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执...

2021-12-02 22:45:45 100

原创 操作符详解2

+=-=*=/=%=>>=<<=&=|=^=sizeof&:取地址操作符*:解引用操作符(类型):(强制类型转换)#include <stdio.h>void test1(int arr[]){ printf("%d\n", sizeof(arr));//(2)}void test2(char ch[]){ printf("%d...

2021-12-01 23:45:24 548

原创 一道面试题

交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换后a=5,b=3错误做法:使用了第三个变量另一种方法:有缺陷:整形数字有上限,若数值太大就会溢出正确方法:按位异或算法的底层逻辑:所以这个步骤就可以理解为:a = a ^ b ^ b 存放到b中b =a ^ a^ b 存放到a中...

2021-12-01 01:34:00 74

原创 操作符详解1

算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数例子:左移操作符:左边丢弃,右边补零结果为:4右移操作符:...

2021-12-01 01:33:04 198

原创 数组作为函数参数11.15

往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法 思想)函数将一个整形数组排序。 那我们将会这样使用该函数://方法1:#include <stdio.h>void bubble_sort(int arr[])//形参arr本质是指针{//计算数组元素个数 int sz = sizeof(arr)/sizeof(arr[0]);//这样对吗? //是错误的//确定趟数 int i = 0; for(i=0; i&...

2021-11-15 13:46:07 1121

原创 二维数组11.13

//数组创建int arr[3][4];//3行4列char arr[3][5];//3行5列double arr[2][4];//2行4列//数组初始化-创建的同时给赋值int arr[3][4] = {1,2,3,4};int arr[3][4] = {{1,2},{4,5}};int arr[][4] = {{2,3},{4,5}};二维数组的使用也是通过下标的方式。#include <stdio.h>int main(){ int...

2021-11-13 19:06:51 178

原创 一维数组笔记11.13

注:数组创建, [ ] 中要给一个常量才可以,不能使用变量。​type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小//实例//代码1int arr1[10];//代码2int count = 10;int arr2[count];//数组时候可以正常创建?//代码3char arr3[10];float arr4[1];double arr5[20];​int..

2021-11-13 15:21:52 691

原创 函数的递归(2)练习+详解

#include<stdio.h>#include<string.h>int my_strlen(char *str){ if (*str != '/0') return 1 + my_strlen(str + 1);//(str+1)是下一个字符的地址 else return 0; }int main(){ char arr[] = "bit";//['b'], ['i'], ['t'], ['/0'] //模拟实现一个strlen函数...

2021-11-10 13:29:59 269

原创 函数的递归(1)

#include<stdio.h>void print(unsigned int n){ if (n>9) { print(n / 10); } printf("%d ", n % 10);}int main(){ unsigned int num = 0;//unsigned是无符号整数 scanf("%u", &num);//%u无符号整型//123 //递归,函数调用自己 print(num);//print函数可以打印参数部分数字的每...

2021-11-09 01:54:13 62

原创 函数的嵌套调用与链式反应11.7

//strlen函数计算字符串长度的库函数名//<string.h>头文件如果你的程序需要调用:strcmp()、strcpy()、strcat()、strlen()这些函数的时候,在程序的开头#include <stdio.h>下面定义好字符串函数库: #include <string.h>, 这样才能合法的调用。...

2021-11-07 21:42:27 210

原创 函数的调用练习(用于熟悉)

//判断1000-2000间是闰年的数//如果判断是闰年,返回1//如果判断不是闰年,返回0int is_leap_year(int n){ if (n % 4 == 0 && n % 100 != 0) return 1; else return 0;}int main(){ int y = 0; for (y = 1000; y <= 2000; y++) { if (is_l...

2021-11-05 21:47:29 976

原创 2021-10-31学习笔记

初识指针

2021-10-31 13:52:00 61

原创 2021.9.26学习笔记(c语言程序设计)

初识关键字

2021-10-04 00:27:00 64

原创 2021.8.30学习笔记(c语言程序设计)

1.表达一个整形(变量age)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int age; age = 20; printf("%d\n", age); return 0;}2.表达一个字符(A)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ char c...

2021-09-23 23:01:47 83

原创 2021.9.23学习笔记

1.加法运算#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int num1 = 0; int num2 = 0; int sum = 0; scanf(" %d%d", &num1, &num2); sum = num1 + num2; printf("sum = %d", sum); return 0;}2.初识循环语句...

2021-09-23 18:11:42 50

原创 2021-08-21 c语言入门学习笔记

笔记本1..c 源文件.h 头文件(head)2.基本框架int main()//主函数-程序的入口-有且仅有一个{return 0;}3.printf(文本) 打印文本 \n换行符4.Ctrl+F5运行 或 FN+Ctrl+F5 (笔记本)5. int 是整形的意思main前面的int表示函数调用返回一个整型值return 0;返回0 (前后呼应)6.数据类型char //字符数据型short //短整型int //整型long //长整型long long /..

2021-08-21 14:25:18 88

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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