自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线性链表的基本操作 ——插入,查找,删除

2024-10-21 14:01:38 157

原创 尾插法关键代码

其中,z 用于控制循环是否继续,n 用于记录链表的长度,初始时 head 为空,p 指向 head,z 被初始化为 1,n 为 0。• 否则,将新节点 s 连接到当前链表的末尾,即让当前末尾节点 p 的 next 指针指向新节点 s。• 给新节点的 data 成员赋值为输入的 x ,并将 next 成员初始化为 NULL。• 如果链表的头节点 head 为空,说明这是第一个节点,将新节点 s 赋值给 head。• 这些操作的目的是根据用户输入构建链表,并正确维护链表的结构和长度。

2024-10-21 13:30:01 350

原创 插入运算关键代码

通过 for 循环,从最后一个元素开始,将其向后移动一位,直到要插入的位置 i - 1 的前一个位置。如果 i < 1 或者 i > Lq->last + 1 ,说明给定的插入位置不符合要求,输出“位置出错!• 理由:MAXLEN 表示顺序表的最大容量,当已存储的元素数量达到最大容量减 1 时,就无法再插入新元素。• 理由:插入位置应该在合法的范围内,即大于等于 1 且小于等于当前最后一个元素的下一个位置。• 理由:表示顺序表中元素的数量增加了 1 ,last 始终指向最后一个元素的位置。

2024-10-21 09:22:31 269

原创 数据结构的删除操作

第二步,如果删除位置合法,即 1 <= i <= Lq->last + 1 ,则执行删除操作。通过一个循环,从位置 i 开始,将后续的元素向前移动一位。即对于 j 从 i 到 Lq->last ,将 Lq->data[j - 1] 赋值为 Lq->data[j]。第一步,检查空表及删除位置的合法性。如果 i < 1 或者 i > Lq->last + 1 ,说明输入的删除位置不合法或者表为空。第三步,完成元素移动后,将表的最后位置标记 last 减 1,即 Lq->last--。

2024-10-21 09:10:10 342

原创 数据结构 按值查找的关键代码

在这个循环中,只要 i 小于等于顺序表 Lq 的最后一个位置 Lq->Last ,并且 Lq 中第 i 个位置的数据不等于要查找的元素 x ,就会执行循环体,将 i 的值增加 1。如果 i 不大于 Lq->Last ,说明在顺序表中找到了元素 x ,此时返回 i ,i 就是元素 x 在顺序表中的存储位置。总的来说,这个函数的作用是在给定的顺序表 Lq 中查找元素 x ,并返回其存储位置,如果未找到则返回 -1。这意味着,只要还没有超出顺序表的范围并且还没有找到要查找的元素,就会继续向后查找。

2024-10-21 09:07:55 274

原创 输出倒数第二个节点数值的关键步骤

NULL) { // 找到倒数第二个节点。// 输出倒数第二个节点的内容。

2024-10-17 11:18:38 129

原创 链表查询最大节点

printf("链表中的最大节点值为:%d\n", maxValue);return -1;// 如果链表为空,返回一个特殊值表示没有最大值。printf("链表为空,无法找到最大节点值。// 创建链表:1 -> 3 -> 2 -> 5 -> 4。// 查找链表中的最大节点值。

2024-10-17 11:09:34 555

原创 插入链表摸位置关键代码

指针p的移动为i-2,i为所需插入位置。

2024-10-14 20:16:12 120

原创 理解指针头插法关键代码

最终的链表结构为:新节点p作为链表头,p指向原来的链表头节点 A,节点 A 指向节点 B,节点 B 指向NULL。假设初始状态有一个链表,链表头为head,指向节点 A,节点 A 又指向节点 B,节点 B 指向NULL。• 此时p的next指针指向了原来的链表头,也就是节点 A。总结:这两行代码实现了将新节点p插入到链表头部的操作。2. 执行“p->next = head;• 链表头head现在指向新节点p。3. 执行“head = p;• p不与链表中的任何节点相连。1. 现在有一个新的节点p。

2024-10-14 20:03:30 314

原创 【链表尾插法】求链表中第n个数据的值

注意:要求用尾插法,头插法创建之后求的结果是肯定是错误的。根据输入数据创建链表,并输出指定位置的数据。如果输入位置不存在,则输出“位置有误”第一行输入一个整数n。第三行输入一个整数p。

2024-09-23 22:11:24 267

原创 【链表操作】前驱和后继

在以head为头指针的非空链表中,找到数据域值为x的结点,输出该结点的前一个结点和后一个结点的数据域值,如果该结点没有前驱结点(即该结点为第1个结点),则以-1代替,如果该结点没有后继结点(即该结点为尾结点),也以-1代替,如果该结点既是第1个结点也是尾结点(即只有1个结点的链表),则输出2个-1。第一行为若干个互不相同的整数,中间用空格分隔,末尾一个整数为-1,以-1前的每个整数为数据域的值创建多个结点,并将这些结点,利用尾插法链接成链表。第2行为1个整数,表示要查找的结点的数据域的值。

2024-09-23 22:10:23 473

原创 【链表操作】查找结点

【代码】【链表操作】查找结点。

2024-09-23 22:08:28 220

原创 【链表操作】链表长度

设计函数int length(struct node * head);,根据链表的头指针head,计算链表的长度(即结点个数)并返回该长度。一行字符,以#结尾,将以#前的每个字符(不包括#)为数据域的值创建多个结点,并将这些结点,利用尾插法链接成链表。

2024-09-23 22:03:19 366

原创 求链表中所有节点的和

【代码】求链表中所有节点的和。

2024-09-22 22:27:29 156

原创 输出链表中第n个结点的数据

【代码】输出链表中第n个结点的数据。

2024-09-22 22:21:52 134

原创 输出链表中倒数第二个结点的数据(以#结束)

【代码】输出链表中倒数第二个结点的数据(以#结束)

2024-09-22 21:57:39 124

原创 【链表初步】最大结点

【代码】【链表初步】最大结点。

2024-09-22 21:51:34 118

原创 【链表初步】动态链表(尾插法)

这段 C 语言代码实现了一个单链表的创建、遍历和销毁功能。通过尾插法创建链表,然后遍历链表输出其中的数据,最后释放链表所占用的内存资源。

2024-09-22 17:10:18 288

原创 链表(3)链表的基本操作

单链表的基本操作主要有;①创建链表;②输出链表;③査我结点;④插入结点,⑤鹏除结点;⑥重组链表。下面分别进行介绍。创建链表是指在程序运行时,进行动态内存分配,创建若千个结点,并把这些结点连接成串,形成一个链表。在进行动态内存分配时,需要使用在(2)介绍的内存管理函数malloc()和 free()。

2024-09-21 16:56:47 1453

原创 链表--(2)动态内存的分配释放与调整

2. 分配 5 个字符数组的内存空间:char *arr = (char *)malloc(sizeof(char) * 5);1. 分配一个整数大小的内存空间:int *ptr = (int *)malloc(sizeof(int));malloc()或calloc()函数的返回值是一个(void*)类型的指针,在使用前需要将函数的返回值转换成特定指针类型,赋给一个指针。,例如“int a=malloc(sizeof(int))”这样的代码是错误的。实例运用 计算n个数的平均值,数字随意输入。

2024-09-19 22:18:00 1200

原创 链表--(1)链表的概念

在由struct books构成的单链表中,每个结点由3个成员组成,前两个成员bno、bname组成了数据域,最后一个成员next构成指针域,它指向链表中的下一个结点(即该指针域中存放了下一个结点的地址)。根据第一个结点的指针域找到第二个结点,再根据第二个结点的指针域找到第三个结点,以此方法可以访问到链表中的所有结点。通常将链表的第一个结点称为头结点(或称链首),将链表的最后一个结点称为尾结点(或称链尾),为了便于对链表中的每一个结点进行操作(插入或删除),定义一个结构指针指向头结点,称其为头指针。

2024-09-19 21:02:27 380 1

原创 结构--指针

结构指针作为函数的参数,要求对应的形参是一个同类型的结构指针,此时实参向形参传递的是结构指针的值,系统会为形参指针分配一个内存单元来存放实参结构指针变量的内容。结构指针可以指向一个同类型的结构变量,但是不能指向结构变量的某一成员,如果要将某一成员的地址赋给结构指针,则需要用强制类型转换,先将成员的地址转换成结构指针的类型。(*p).n:得到p指向的结构变量str的成员n的值p->n:得到p指向的结构变量str的成员n的值。p->n十十:得到p指向的结构变量str的成员n的值,然后使成员n的值加1.

2024-09-17 18:22:49 1064

原创 结构数组作为函数参数的实例

【代码】结构数组作为函数参数的实例。

2024-09-16 22:31:41 144

原创 结构 数组

即结构数组名作为函数的实参传递给对应的形参,实参和形参指向同一段内存空间,如被调用函数中改变了形参结构数组某个元素的成员值,则相应的实参结构数组元素的值也会发生改变。(2)在对结构数组进行全部初始化时,初值的个数应当与结构数组的元素个数以及每个数组元素的成员个数相匹配。(1)在对结构数组进行初始化时,需遵循数组的初始化规律,可对其中的部分数组元素初始化,但是对结构数组元素中的每个成员都要进行初始化。(3)当对结构数组的全部元素进行初始化时,可以省略数组的长度,系统根据初始化数据的多少来确定数组的长度。

2024-09-16 22:21:10 474

原创 结构体变量的引用

定义了结构变量后就能在程序中引用它了,在ANSIC中除了允许具有相同类型的构变量相互赋值以外,不能整体引用结构变量,而只能引用结构变量中的成员。结构变量的成员与普通变量一样可以参与各种运算,对结构变量的赋值、存取、运算都是通过引用其成员进行的。但是不能把结构变量作为一个整体进行赋值、存取或运算,只能对结构变量的成员进行赋值、存取或运算。例如对于定义的结构变量bk1,下面的用法是错误的。(2)对结构中数组成员的引用也是通过逐个引用数组元素来实现的,如:bk1.bname[0]

2024-09-16 18:19:10 655

原创 c语言 —— 结构变量

方式(3)中由于省去了结构名,在此定义语句后面无法再定义这个类型的其他结构变量,除非把定义过程再写一遍。另外,以后如果再声明成员完全相同的结构类型,也和此次定义的结构类型属于不同的结构类型。因此在声明了结构类型后,还需要定义结构变量,以便在程序中引用它。同其他基本数据类型的变量一样,结构变量在定义的同时也可以进行初始化。(1)对结构变量初始化时,需要按照其成员出现的顺序对每个成员依次赋值,不能跳过前面的成员给后面的成员赋值,例如下面的用法是错误的。(2)不能在结构内部给成员赋初值,例如下面的用法是错误的。

2024-09-16 18:02:13 770

原创 结构体初始和嵌套

例如,在描述一本图书的信息时,图书编号、书名、专业领域、作者、出版社、单价等都是和图书相关的基本信息,这些信息是作为一个整体来描述图书的,如果将它们分别定义为互相独立的简单变量,则难以体现它们之间的内在联系。结构是将彼此相关的、类型不同的数据组合在一起的构造数据类型,它是由若干成员(也称为结构分量)组成的,每一个成员的数据类型可以是基本数据类型,也可以是构造类型。(4)定义结构类型时,不允许将成员的数据类型定义成自身的结构类型,这是因为结构类型的声明是构造阶段,系统还不知道需要分配多少内存空间。

2024-09-16 17:31:23 424

原创 指针变量的总结

2024-09-14 09:37:44 266

原创 二级指针与指针数组

如char *a[5],则a数组中的5个元素都是指向char 类型的指针。定义格式中,[]的优先级高于*,所以首先是a[5],表示a是一个有5个元素的数组,然后才与*结合,表示数组中的元素都是指针类型。注意要区分char(*a)[5]与char*a[5]的定义格式,char(*a)[5]是行指针,指向一维数组;char*a[5]是指针数组,每个数组元素为指针类型的数组。为了处理方便,把若干指针变量按有序的形式组织起来,构成指针数组,数组中的每元素都是指针变量。在结构上,指针数组与其它类型的数组是一样的。

2024-09-13 11:27:50 198

原创 指针与字符串

实例将字符串“a1aa2a3a4”中a替换成b。实例来使用指针与下标方式访问字符串的实例。

2024-09-13 11:20:03 426

原创 指向二维数组的行指针变量

n表示二维数组分解为多个一数组的长度,也就是所指向的二维数组的列数。格式中,()号、*号和[n]都不可省略注意:行指针变量用于指向一行数组元素的起始地址,而非数组中的元素。定义行指针变量以后,只要将二维数组的首地址赋给行指针变量,则行指针变量就与二维数组建立了联系,二维组也就成为行指针变量指向的对象。二维数组的每一行都视为一个一维数,可以定义一个指针来指向每一行的一维数组则行指针变量是指向一行数组元素的起始地址。声明行指针变量的一般格式为 类型名(*指针变量名)[n]以二维数组来实现移动行指针行列。

2024-09-12 21:19:20 360

原创 指针与二维数组

(a+i)+j 和 a[i]+j是二维数组第i行、第j列的地址, 问数组元素a[i][i]的等价表达式有三种:a[i][i](下标法)、*(a[i]+j)和*(*(a+i)+j)(指针法)。行列地址的转换方式为:行地址前加“*”将变为列地址,如a为行地址,*a就是列地址:列地址前加“&”将变为行地址,例如,a[0]为列地址,&a[0]为行地址。如a[1]+1和*(a+1)+1均为列地址,则*(a[1]+1)和 * (* (a+1)+1)均表示数组元素a[1][1]。

2024-09-12 20:46:30 339

原创 指针的运算

只适用于两个指针所指对象在同一数组的情况。当 p > q 时p 指元素在q所指元素之前。指针与整数的加减结果是指针值,即地址。指针加或减n都是第n个元素的首地址。用于两指针所指对象在同一数组中,来获取两个指针间有多少个数组元素。自加或自减n 结果都是指针值,既地址。(3)(*p)++等价于a[0]++;(1)*p++ 等价于*(p++);(2)*++p等价于*(++p);(4)++*p等价于++(*p);2.指针的自加或自减运算。1.指针的加减整数的运算。3.指针的关系运算。4.指针的相减运算。

2024-09-12 20:28:38 140

原创 指针与一维数组

a和p是有差别的,数组名a是一个指针常量,不可赋值,不能进行“a++”操作;p是一个指针变量,可赋值,可以进行“p++”操作。对于数组元素的访问,可以使用下标,也可以使用指针变量,移动指针可以指向数组中的任意一个元素。注意p[i]表达式中p不是数组名,是指针,这是指针的下标表示法。我们可以利用运算符+,*,[]建立指针与一维数组的关系,如下。因为p是指向一维数组的首元素的指针。例如,一维数组和指针的如下定义。下面介绍四种访问数组元素的四种等价方式。

2024-09-08 12:16:48 260

原创 指针与函数(三)

函数和数组一样,经系统编译后,其目标代码在内存中连续存放,其名字本身就是一个地址,是函数的入口地址。C语言中,指针可以指向变量,也可以指向函数。定义了指向函数的指针以后,必须将一个函数名(函数的入口地址)赋给函数指针,然后才能用函数指针间接调用该函数。/*定义指向函数的指针pc,限定pc所指函数有两个整型参数*/指问函数的指针的定义格式为 类型名(*指针变量名)参数表 其中参数表为函数指针所指向函数都所有形参。/*指针pc指向函数ave*/三 .指向函数的指针。

2024-09-07 22:20:58 217

原创 指针与函数(二)

注意函数中数组的存储类型一定要是静态(static)的,如果不是静态数组,函数返回时,数组已经被释放,则不能返回地址。指针函数在处理动态数据结构时非常有用。返回值的指针类型的函数称为返回指针值的函数。返回指针值的函数的一般形式为。数据类型名 *函数名(参数表)例为 int * max (int n);二 返回指针值的函数。

2024-09-07 22:00:58 407

原创 指针与函数(一)

C语言中,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个地址传递给函数,函数可以通过指针访问指针所指向的对象。同样,函数的返回值可以是整型、实型、字符型,也可以是指针类型。指针作为函数的形参时,在形参说明时需要使用格式“类型名*指针名”,*号不能省略,而在函数定义的说明部分,*号的作用是类型说明符。在形参说明格式需要使用格式为“类型名 * 指针名”这样的类型。要注意里面*的使用,要理解*作为间接访问符的意义。一 .指针作函数的参数。实战利用函数实现交换两个变量的值。

2024-09-07 21:40:57 208

原创 访问指针变量的实例

【代码】访问指针变量的实例。

2024-09-07 21:25:55 103

原创 指针初始化和定义

在计算机中我们把内存单元的编号也称为地址。C语言中给地址起了新的名字叫:指针。所以我们可以理解为:内存单元的编号 ==地址 == 指针。这里的*是指针的一种表示,告诉我们是指针。注意的指针变量只能存放地址不能错误赋值。1.使用未初始化的指针,导致出现随机的结果。3. 使用指针变量初始化其他同类型指针变量。4. 指针可以被初始化为0或NULL。为 指针变量名1 = 指针变量名2;3.指针与初始化指针对象类型不一致。2. 指针指向数组的初始化。1.指针指向变量的初始化。注意指针类型一定要相同。

2024-09-07 17:14:52 604

原创 【无标题】c语言中实用函数

2024-09-07 15:44:35 367

空空如也

空空如也

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

TA关注的人

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