Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义

链表

空链表:

注意:函数不能返回局部变量的地址

操作:

1.创建空链表

2.头插

3.尾插

4.链表遍历

5.链表的长度

free:释放

删除:

头删

void  popFront(struct Node *head)

{

     //1.p指针变量指向首节点

     //2.断开链表
     head->next = p->next;

      //3.释放p所在的节点
       free (p);

}

  void popFront (struct Node *head)    //头删函数
  {
     if(isPuanduan(head==0))
      {
          struct Node *p = head->next;      //定义一个结构体指针指向首节点
  
          head->next = p->next;    //将下一个节点的地址给到头结点的指针域
          free(p);
      }
  }

尾删:

void popBake(struct Node *head)

{

       //1.p定位到尾节点的前一个节点 
       while (p->next->next != NULL)
       {
          p = p->next;
       }
       //2.释放 p->next
       //3.p所在节点成为了新的尾节点 
       p->next = NULL;

}

void popBake (struct Node *head)        //尾删函数
{
	if (isPuanduan(head)==0)       
	{                                
		struct Node *p = head;      //定义一个结构体指针指向首节点

		while (p->next->next != NULL)      //判断这个链表的指针域的下个指针域是否为空
		{
			p = p->next;                //不是继续指向下一个
		}

		free(p->next);         //删除尾节点
		p->next = NULL;         //给现在指的节点的指针域为空
	}
}

位运算

位运算——0  1

用途

1、控制硬件,硬件的操作,往往都是操作对应的寄存器的位来实现的。

2、操作系统的某些文件信息的存储,通常也是用位来描述的。
比如: ls -l命令看到的关于文件的一些信息

3、许多压缩和加密操作都是直接处理的单独的位。

运算说明

& --- 有一个位为0,则结果为0,只有两个位都为1时,结果才为1

   //逻辑运算中的规则:一假则假

l---有一个位为1,则结果为1 ,只有两个位都为0时,结果才为0

     //逻辑运算中的规则:一真则真
 ~--- 0,1相反/逻辑运算中的规则:一假则假

^ ---相同为0相异为1  
                   //同假异真
<<-----左移运算      数值<<位数  左移一次相当于乘二

>>-----右移运算     数值>>位数    

偶数位置0:

#include <stdio.h>

int main (void)
{
	
   int a = 0xffffffff;

	int i = 0;
	while(i<32)
	{
		i+=2;
		a = a&(~(1<<i));
	}

	printf ("%#x\n",a);

    return 0;
}

 

基数位置1:

#include <stdio.h>

int main (void)
{
    int a = 0x55555555;

	int i = 0;
	while (i<32)
	{
		i++;
		if (i%2 != 0)
		{
			a = a | (1<<i);
		}
	}
	printf("%#x\n",a);
    
    return 0;
}

异或运算:

  //同假异真
   int a = 0x33;
   a ^ 0x55;
   
   0011 0011
   0101 0101 ^
   ----------
   0110 0110 //0x66
 
<<  
   数值<<位数 

   int a = 0x33;
   a<<1
   0110 0110
    6    6  //左移一位相当于乘以2 
>> 

右移:较为特殊

注意:看数据类型  有符号类型的数据,此时右移,最高位补符号  //算数右移

                                无符号类型数据                        默认补零          //逻辑右移

统计int类型中1的个数

int a = 1213; //二进制中1的个数 

#include <stdio.h>

int main (void)
{
    unsigned int a = 1213;

	int i = 0;

	int cat=0;
	for (i = 0;i<32;++i)
	{
		if(a>>i & 1)
		{
			cat++;
		}
	}

	printf ("%d\n",cat);

	return 0;
}

预处理

不是c语言的一部分

编译过程的一部分

#include 
#define  N 10
预处理命令:
      都是以   #  开头的 
 

编辑程序 --vi 
编译程序 --gcc 
运行文件 

 . c———>可执行文件的过程

#include <stdio.h>
#define Pi 3.1415926
#define Max(a,b) (a)>(b)?(a):(b)

int main (void)
{
#if 0
	float s = 0;
	float r = 6;
    float C = 0;

	scanf ("%f",&r);

	printf ("s = %.2f   C = %.2f\n",Pi*r*r,2*Pi*r);
#endif

	int a=0;
	int b=0;

	scanf("%d%d",&a,&b);
	 
	printf ("Max = %d\n",Max(a,b));
	return 0;
}

宏定义

#define   宏名

预处理过程:文本的原样替换

 带参宏:
       文本替换 --- 有可能导致,
       源代码的体积变大 。
       快 --预处理阶段干 
       编译之后,对应的代码就已经在可执行代码中了
 函数:
       调用 ---- 只有一份代码
       会有时空开销。

 可以选择带参宏,功能小,代码量少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/366187.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能深度学习发展历程-纪年录

前言 为了理解模型之间的改进关系、明确深度学习的发展目标、提高自身对模型的深度理解、贯彻爱与和平的理念。总之&#xff0c;我做了如下表格。 时间 重大突破 模型改进 详细信息 1847 SGD 随机梯度下降 1995 SVM 支持向量机 1982 RNN 循环神经网络&#xff0c;…

Kimera2: 面对真实路况中强大且具有准确尺度的语义SLAM

文章:Kimera2: Robust and Accurate Metric-Semantic SLAM in the Real World 作者:Marcus Abate , Yun Chang , Nathan Hughes , and Luca Carlone 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。 公众号致力于…

基于STM32的DMA在外设数据交换中的应用案例

如何使用STM32的DMA在外设数据交换中实现高效的数据传输呢&#xff1f;下面&#xff0c;我将提供一个应用案例&#xff0c;涉及使用STM32的DMA在UART外设和内存之间进行数据传输的示例。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 ❤欢迎关…

Qt/C++音视频开发65-切换声卡/选择音频输出设备/播放到不同的声音设备/声卡下拉框

一、前言 近期收到一个用户需求&#xff0c;要求音视频组件能够切换声卡&#xff0c;首先要在vlc上实现&#xff0c;于是马不停蹄的研究起来&#xff0c;马上查阅对应vlc有没有自带的api接口&#xff0c;查看接口前&#xff0c;先打开vlc播放器&#xff0c;看下能不能切换&…

undo log 和 redo log的区别

undo log 和 redo log的区别 缓冲池&#xff08;Buffer Pool&#xff09;是MySQL用于存储数据页的内存区域&#xff0c;它用于减少对磁盘的读写操作&#xff0c;提高数据库的访问速度。在MySQL中&#xff0c;数据被分为多个固定大小的数据页&#xff08;通常为16KB&#xff09…

【Golang入门教程】如何使用Goland创建并运行项目

自然语言处理的发展 文章目录 自然语言处理的发展**前言**创建新项目编辑运行/调试配置编写并运行代码总结强烈推荐专栏集锦写在最后 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站: 人工…

算法篇之二分

二分算法简介 特点 最简单的一种算法&#xff0c;也是最恶心&#xff0c;细节最多&#xff0c;最容易写出死循环的算法时间复杂度O(logN) 如何学习 明白其中的算法原理&#xff0c;二分并不是只有数组有序的的时候使用&#xff0c;而是看是否具有二段性。模板 朴素的二分模…

JDK版本如何在IDEA中切换

JDK版本在IDEA中切换 一、项目结构设置 1.Platform——Settings 项目结构---SDKS 2.Project——SDK 3.Modules——SDK——Sources 4.Modules——SDK——Dependencies 二、设置--编译--字节码版本 Settings——Build,——Java Compiler

【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?

这样&#xff0c;你先在网上找一套完整openssh升级方案&#xff08;不是yum或apt的&#xff0c;要源码安装的&#xff09;&#xff0c;然后在虚拟机上反复安装测试&#xff0c;直到把他理解了、背下来。 面试的时候让你简单说说linux命令什么的&#xff0c;你就直接把这个方案…

Linux 网络配置及基础服务

目录 一. 查看网络配置信息的相关命令 1.1 ifconfig 命令 作用 1&#xff1a; 作用 2&#xff1a; 拓展&#xff1a; 1.2 ip/ethtool命令 1.3 hostname命令 1.4 route 命令 1.5 netstat 命令 1.6 ss&#xff08;socket statistics&#xff09;命令 1.7 ping 命令 …

接口自动化处理动态参数

接口自动化处理动态参数 1、流程说明 某些接口的请求入参数据不能写死&#xff0c;需要动态传参。如用户注册接口&#xff0c;用户名需要动态生成。使用yaml编写测试数据时&#xff0c;在需要动态参数的数据后面添加上特殊字符${生成动态数据的方法名&#xff08;参数&#x…

网工内推 | 港企、合资公司,厂商认证优先,五险一金

01 九龙仓&#xff08;长沙&#xff09;置业有限公司 招聘岗位&#xff1a;IT网络工程师 职责描述&#xff1a; 1.负责公司网络架构规划设计、设备选型、远程组网方案的规划和设计&#xff1b; 2.负责公司网络IP地址规划管理&#xff0c;根据业务需求和公司状况&#xff0c;对…

推荐收藏!算法工程师面试常考的手撕面试题!

今天给大家分享一些算法工程师技术面试中常手撕的代码。 不管是秋招还是社招&#xff0c;互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。 如果你对这些感兴趣&#xff0c;可以文末找我们交流 手撕 numpy写线性回归的随机梯度下降&#xff08;stochastic gra…

微信小程序 安卓/IOS兼容问题

一、背景 在开发微信小程序时&#xff0c;不同的手机型号会出现兼容问题&#xff0c;特此记录一下 二、安卓/IOS兼容问题总结 2.1、new Date()时间转换格式时&#xff0c;IOS不兼容 问题&#xff1a;在安卓中时间格式2024-1-31 10:10:10&#xff0c;但是在iOS中是不支持 &q…

模板讲解之进阶

在之前的C入门的博客中我们就学习到了模板初阶&#xff0c;今天我们来学习模板的进阶&#xff0c;以便于更好地将模板运用到代码中 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的…

Java基础 集合(五)Set详解

目录 简介 set种类 AbstractSet 抽象类 SortedSet 接口 HashSet LinkedHashSet TreeSet 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff…

【2024.2.2练习】方格取数

题目描述 题目思路 如果从A到B只走一次的话可以用动态规划轻松解决。问题在于会走两次&#xff0c;第二次显然要走获取数字最多的路径&#xff0c;但第一次走哪条路径需要抉择。 错误的思路是以为这道题适合贪心&#xff0c;两次都选择最优路线。可以举出反例。 A2112112B …

Vim编辑器

1.文件复制 拷贝/etc/profile 数据到/root 目录下 cp /etc/profile /root如果root文件夹在上一目录下 cp /etc/profile ../root 2.打开文件 vim etc/profile 打开ect文件夹中的profile文件 3.文件编辑 文件编辑分为一般模式 与编辑模式。打开文件为一般模式&#xff0c;按…

【c语言】strcpy()和strncpy():字符串复制详解

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;c语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&a…

C++ copy()函数详细介绍

copy() 是一个标准库函数&#xff0c;位于 头文件中。它用于将一个容器中的元素复制到另一个容器中&#xff0c;或者将一个范围内的元素复制到另一个范围中。 函数参数介绍 copy( first, last, d_first );first 和 last&#xff1a;表示输入范围的迭代器。 first 指向要复制的…