C语言基础(15)链表的删除,插入和共用体,枚举,typedef

一、链表的,尾插,删除,插入

在链表的尾部插入节点:

void pushBack(struct Node *phead ,int n)
{
    if(isEmpty(phead))
    {
        pushFront(phead,n);
    }
    else
    {
        struct Node *pnew = malloc(sizeof(struct Node));
        struct Node *p = phead->next;
        while(p)
        {
            p= p->next;
        }
        p->next = pnew;
        pnew->next = NULL;
        pnew->data = n;
    }
}

删除链表中的头节点:

void popFront(struct Node *phead)
{
    if(!isEmpty(phead))
    {
        struct Node *p = phead->next;
        phead->next = p->next;
        free(p);
    }
}

删除链表中的尾节点

void popBack(struct Node *phead)
{
    if(sizeList(phead) >= 2)
    {
        struct Node *p = phead->next;
        while(phead->next->next)
        {
            p = p->next;
        }
        free(p->next);
        p->next = NULL;
    }
    else
    {
        popFront(phead);
    }
}

清除链表

void clear(struct Node *phead)
{
    while(phead->next)
    {
        popFront(phead);
    }
}

二、共用体

共用体是一种特殊的数据结构,允许将不同的数据类型存储在同一内存位置。只可以存储一个成员。

共用体的定义

union demo
{
    int i;
    short s;
    char c;
};

由于共用体中的所有成员共享同一内存位置,所以修改一个成员会覆盖之前存储的值。

三、枚举

枚举是一种用户定义的数据类型,它由命名的整型常量组成。枚举可以为一组相关的常量定义有意义的名称,而不是直接使用数字。

enum 枚举名 {
    枚举值1,
    枚举值2,
    枚举值3,
    ...
};

枚举中的值实际上是整型值。

四、typedef

typedef用于给已有的数据类型定义新的名字,提高代码的可读性和可维护性。

typedef unsigned long ulong;
ulong a = 10;
printf("a : %lu\n", a);

定义复杂的结构类型时,typedef也非常有用

五、位运算

1. 位运算符及其用法

按位与 (&)

按位与运算符对两个数的每一位进行与操作,只有当两位都为1时,结果才为1,否则为0。

常用于清零某些特定位,或者检测某些特定位是否为1。

int a = 5;    // 二进制: 0101
int b = 3;    // 二进制: 0011
int result = a & b; // 结果: 0001, 即 1
2.按位或 (|)

按位或运算符对两个数的每一位进行或操作,只要有一位为1,结果就是1。

常用于设置某些特定位为1。

int a = 5;    // 0101
int b = 3;    // 0011
int result = a | b; // 0111, 即 7
3.按位异或 (^

按位异或运算符对两个数的每一位进行异或操作,当两位不同时,结果为1,相同时结果为0。

常用于翻转某些特定位,或者实现加密和解密操作

int a = 5;    // 0101
int b = 3;    // 0011
int result = a ^ b; // 0110, 即 6
4.按位取反 (~)

按位取反运算符对一个数的每一位进行取反操作,0变1,1变0。

常用于快速计算负数的补码形式。

int a = 5;    // 0000 0101
int result = ~a; // 1111 1010, 即 -6 (在有符号整数中)
5.左移 (<<)

左移运算符将一个数的各二进制位全部左移若干位,右边补0。

常用于快速乘以2的幂。

int a = 5;    // 0000 0101
int result = a << 1; // 0000 1010, 即 10
6.右移 (>>)

右移运算符将一个数的各二进制位全部右移若干位。

常用于快速除以2的幂。有符号数和无符号数的右移存在差异。

int a = 5;    // 0000 0101
int result = a >> 1; // 0000 0010, 即 2

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值