首页 > 其他分享 >【趣学C语言和数据结构100例】

【趣学C语言和数据结构100例】

时间:2024-10-20 20:50:48浏览次数:3  
标签:单链 函数 h2 趣学 next 链表 循环 100 C语言

【趣学C语言和数据结构100例】

问题描述

51.在一个递增有序的单链表中,存在重复的元素。设计算法删除重复的元素,例如(7.10.10.21.30.42.42.42.51.70)将变为(7.10.21.30.42.51.70)。

52.设A 和 B 是两个单链表(带头结点),其中元素递增有序。设计一个算法从 A 和B中的公共元素产生单链表 C,要求不破坏 A、B 的结点。

53.两个整数序列 A=a1,a2,a…,a和 B=b,b2,b.…,b已经存入两个单链表中,设计一个算去,判断序列 B是否是序列 A 的连续子序列。

54.设计一个算法用于判断带头结点的循环双链表是否对称

55.有两个循环单链表,链表头指针分别为 hl 和 h2,编写一个函数将链表 h2 链接到链表11 之后,要求链接后的链表仍保持循环链表形式。

代码分析

51.有序的单链表,删除重复的元素
分析:无返回值+对链表操作,故函数名为void 函数名(LiukLIist L),定义节点p和q(p当前,即L->next开始,q找重复)如果单链表为空,则直接return 0;使用while(p->next)循环遍历,使q从p的下一个开始,如果2个的值相等,则p直接指向q的下一个,跳过当前q,并且释放free(q),否则使p向后移动一位。

52.A和B两个单链表(带头结点)的公共元素
分析:返回链表+AB不操作,故函数名为LiukList 函数名(LiukLIist A,LiukLIist B),创造C链表即(LiukList C=(LiukList)malloc(sizeof)(Lnode) ,C->next=NULL),p、q 和 r,分别指向 A 链表、B 链表和新链表 C 的当前节点,使用while循环遍历,只要一个到达最后即可,使用&&,如果p的值>q的值,使q=q->next,如果q的值>p的值,使p=p->next(使小的移动,直到相等),当值相等时,进行给C,即尾插法。创造一个s节点,用来存储值在赋值给C,值先交付,使r的下一个指向此时的p,更新r到达此时C的最后一位,尾插结束,使p和q同时向后移动一位,知道结束。在结束后,在C的最后加入r->next=NULL;然后返回链表C。

53.判断序列 B是否是序列 A 的连续子序列
分析:返回值为int,对AB不操作,故函数名为int 函数名(LiukLIist A,LiukLIist B)。三个指针 p、q 和 pre,分别指向 A 链表、B 链表和 A 链表的当前节点。使用while循环遍历,代码遍历两个链表,比较 p 和 q 指向的节点数据,如果相同,则继续遍历;否则,将 q 指针重置为 B 链表的头部,并将 p 指针指向 pre 的下一个节点。直到结束,如果此时的q为空,则说明可以到达最后,说明找到了,则返回1,否则返回0。

54.判断带头结点的循环双链表是否对称
分析:返回值为bool类型,对链表不操作,故函数名为bool 函数名(LiukLIist A)。定义p,q分别指向链表的头部和尾部,使用while循环遍历,只要p!=q或者p->next!=q,一直,if(p->data==q->data),则进行同时移动,如果不相等则return 0。在结束循环为进行返回,则返回return 1。

55.链表的拆分
分析:两个循环单链表的插入连接,初步思路为,h1的最后和h2的开头连接,h1的开头和h2的尾部连接即可。返回类型为链表,A会发生变化,故函数名为LiukList 函数名(LiukList &h1,LiukList &h2),在函数中使p和q分别先找到h1和h2的尾部。找到后令p的下一步指向h2,令q的下一步指向h1,然后返回h1。

//循环链表找尾部:
while(p->next!=头部){
   
	p=p->next;
}

代码实现

#include <stdio.h>
#include <cstring>
#include <ctype.h>
#include <math.h>
int main() {
   
	

标签:单链,函数,h2,趣学,next,链表,循环,100,C语言
From: https://blog.csdn.net/lwcwam/article/details/143097114

相关文章

  • c语言:指针以及指针变量(一)
    目录地址有关地址的操作符取地址操作符&解引用操作符*指针变量指针的传参调用指针+-整数void*指针指针-指针野指针野指针成因指针未初始化指针越界访问指针指向的空间被释放防止出现野指针地址地址也就是我们常说的指针,在讲解指针前先讲个生活中的小例子,方便理......
  • C语言深入理解指针笔记(3)
    1.字符指针变量 我们已经了解的指针变量类型有:整形指针变量:int*pint:存放的是整型变量的地址浮点型指针变量:float*pf:存放的是浮点型变量的地址类比可知:char*pc:字符型指针变量:存放的是字符型变量的地址,指向字符型的数据 首先,字符型指针变量的使用有两种方法:......
  • ISAD1000/5004 Software Engineering
    IntroductiontoSoftwareEngineering(ISAD1000/5004)Semester2,2024Due:Friday18October,23:59GMT+8Weight:50%oftheunitmarkNoteThisdocumentissubjecttoclarificationsandminorchangesthatremoveambiguityoraddressfrequentlyaskedquestions.......
  • C语言笔记21 字符串
    字符数组charword[]={'H','e','l','l','o','!'};word[0]Hword[1]eword[2]lword[3]lword[4]oword[5]!这不是C语言的字符串,只是字符数组,不能用字符串的方式做计算字符串charword[]={'H','e','l','l&......
  • 私钥碰撞器,单窗口月搜易可达1000+可无限放大
    功能介绍:协议私钥碰撞,24小时全自动挂机碰到自动建立文档储存运气好每天几十几百个U甚至更多运气不好也有好几个U有保底双协议bnb和eth,btc待发布设备需求:电脑......
  • [包教包会]C语言:详解分支语句(if , switch , goto)和循环语句(while , for , do while
    概览控制语句用于控制程序的执行流程,以实现程序的各种结构方式C语言支持三种结构:顺序结构、选择结构(分支)、循环结构:(其实显示中的事件也都是由这三者混合合成的)它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:1.条件判断语句也叫分支语句:if语句......
  • 【C语言】指针进阶【万字详细版】
    ㊙️小明博客主页:➡️敲键盘的小明㊙️✅关注小明了解更多知识☝️文章目录前言一、字符指针二、指针数组三、数组指针3.1数组指针的定义3.2数组名和&数组名3.3数组指针的使用四、数组参数、指针参数4.1—维数组传参4.2二维数组传参4.3一级指针传参4.4二级指针......
  • 深入优化MySQL深度分页:从第10000页出发,Java模拟高效分页技巧
    在深度分页(如LIMIT99990,10)中,SQL的优化方式主要是为了避免MySQL在执行时需要扫描大量的无用数据,从而提高查询效率。以下是几种常见的SQL层面的优化方法:1.使用覆盖索引优化覆盖索引是一种索引优化技术,即查询只通过索引就可以获得所需的数据,而不需要访问实际的数据......
  • C语言库函数round函数
    简单使用:把浮点数四舍五入到整数round函数定义在<math.h>头文件中,其原型为doubleround(doublex);round函数用于将浮点数四舍五入到最接近的整数以下的C语言代码用round函数计算了不同浮点数的四舍五入值,并将结果打印出来#include<stdio.h>#include<math.h>intmai......
  • C语言练习之猜数字游戏
    一游戏规则:1.在电脑上生成1-100的随机数2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈二游戏的实现:1.随机数的生成:1.1rand C语言的库函数提供了一个rand函数,它的头文件是stdlib.h,rand函数可以根据一个种子随机生成0-RAND_MAX(最少是32767)......