C++语法:类、结构体、指针、引用

C++语法:类、结构体、指针、引用


一. 类与结构体

类的定义
数据成员 成员函数

类的使用

类的注意
结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public。

二. 指针和引用

注意
1.数组名是一种特殊的指针。
2.指针指向存放变量的值的地址
3.引用和指针类似,相当于给变量起了个别名。

地址->数值->名字

三. 链表

增删查改

四例题求解

课内例题
1.斐波那契数列


class Solution {
public:
    int Fibonacci(int n) {
        int a = 0, b = 1;
        while (n -- ) {
            int c = a + b;
            a = b, b = c;
        }
        return a;
    }
};

2.替换空格


class Solution {
public:
    string replaceSpaces(string &str) {
        string res;
        for (auto x : str)
            if (x == ' ')
                res += "%20";
            else
                res += x;
        return res;
    }
};

3.求1+2+…+n



class Solution {
public:
    int getSum(int n) {
        int res = n;
        n > 0 && (res += getSum(n - 1));
        return res;
    }
};

4.在O(1)时间删除链表结点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {

        auto p = node->next;

        node->val = p->val;
        node->next = p->next;
        // 这两步的作用就是将 *(node->next) 赋值给 *node,所以可以合并成一条语句:
        // *node = *(node->next);

        delete p;
    }
};

5.合并两个排序的链表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* merge(ListNode* l1, ListNode* l2) {
        ListNode *dummy = new ListNode(0);
        ListNode *cur = dummy;
        while (l1 != NULL && l2 != NULL) {
            if (l1 -> val < l2 -> val) {
                cur -> next = l1;
                l1 = l1 -> next;
            }
            else {
                cur -> next = l2;
                l2 = l2 -> next;
            }
            cur = cur -> next;
        }
        cur -> next = (l1 != NULL ? l1 : l2);
        return dummy -> next;
    }
};

课间习题
1.左旋转字符串

class Solution {
public:
    string leftRotateString(string str, int n) {
        return str.substr(n) + str.substr(0, n);
    }
};

2.把字符串转换成整数

class Solution {
public:
    int strToInt(string str) {
        int k = 0;
        while (k < str.size() && str[k] == ' ') k ++ ;
        long long res = 0;

        int minus = 1;
        if (k < str.size())
        {
            if (str[k] == '-') minus = -1, k ++ ;
            else if (str[k] == '+') k ++ ;
        }
        while (k < str.size() && str[k] >= '0' && str[k] <= '9')
        {
            res = res * 10 + str[k] - '0';
            if (res > 1e11) break;
            k ++ ;
        }

        res *= minus;
        if (res > INT_MAX) res = INT_MAX;
        if (res < INT_MIN) res = INT_MIN;

        return res;
    }
};

3.反转链表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *prev = nullptr;
        ListNode *cur = head;
        while (cur)
        {
            ListNode *next = cur->next;
            cur->next = prev;
            prev = cur, cur = next;
        }
        return prev;
    }
};

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head || !head->next) return head;
        ListNode *tail = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return tail;
    }
};


4.两个链表的第一个公共结点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        auto p = headA, q = headB;

        while (p != q)
        {
            if (p) p = p->next;
            else p = headB;
            if (q) q = q->next;
            else q = headA;
        }

        return p;
    }
};

**5.删除链表中重复的节点 **

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplication(ListNode* head) {
        auto dummy = new ListNode(-1);
        dummy->next = head;

        auto p = dummy;
        while (p->next) {
            auto q = p->next;
            while (q && p->next->val == q->val) q = q->next;

            if (p->next->next == q) p = p->next;
            else p->next = q;
        }

        return dummy->next;
    }
};

学习资源 《语法基础》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C是一种流行的编程语言,由Dennis Ritchie在20世纪70年代开发。C语言被广泛用于系统编程、操作系统、网络编程、游戏开发等领域。C语言简单高效,可以直接操作计算机的硬件,具有较高的性能和可移植性。C语言的语法和结构被很多其他编程语言所借鉴和扩展,如C++、Java、Python等。 ### 回答2: C指的是计算机编程语言C。C语言是一种通用的、高级的编程语言,由美国计算机科学家丹尼斯·里奇于20世纪70年代初设计和开发。C语言具有简洁、高效、灵活、可移植等特点,被广泛应用于操作系统、嵌入式系统、游戏开发、图形处理等领域。 C语言的特点包括: 1. 简洁高效:C语言的语法结构简单、紧凑,易于理解和学习。与其他高级语言相比,C语言的执行效率更高。 2. 灵活可移植:C语言可以在不同的操作系统和平台上编写,并且可以通过简单的修改源代码实现跨平台运行。 3. 强大的控制能力:C语言提供了丰富的控制结构和运算符,可以实现复杂的逻辑和算法。 4. 易于扩展和维护:C语言支持模块化编程,可以将代码分成多个模块,提高代码的可读性、可维护性和重用性。 5. 丰富的函数库:C语言拥有广泛的标准函数库,包括输入输出、字符串处理、数学计算等功能,可以大大简化编程过程。 总之,C语言是一种功能强大、灵活高效的编程语言,是计算机科学教育和软件开发中必学的基础语言之一。无论是初学者还是专业程序员,掌握C语言对于理解计算机底层原理、开发高效的程序以及进一步学习其他编程语言都有着重要的意义。 ### 回答3: C是一种高级的编程语言,它由贝尔实验室的Dennis Ritchie在20世纪70年代开发。C语言在计算机编程领域有着广泛的应用,尤其是在系统级编程和嵌入式系统开发方面。C语言的设计目标是提供一种效率高、跨平台、可移植性强的编程语言。 C语言有许多特点使其成为一种流行的编程语言。首先,C语言具有简洁而紧凑的语法,使得编写代码变得相对容易。其次,C语言提供了丰富的运算符和控制结构,使得程序员能够更灵活地控制程序的执行流程。另外,C语言还支持指针,这使得程序员能够直接访问内存地址,从而实现更高效的内存管理。此外,C语言还有丰富的标准库和函数,方便程序员进行各种常见的操作。 C语言广泛用于开发各种应用程序,包括操作系统、嵌入式系统、游戏、编译器等。由于C语言具有高效性和可移植性,很多常见的编程语言,例如C++、Java等,都是在C语言的基础上发展而来的。 C语言的学习对于初学者来说可能有一定的难度,因为它需要了解指针、内存管理等概念。但是一旦掌握了C语言,你就可以更加深入地理解计算机系统的底层原理,这对于日后的编程发展非常有帮助。 总之,C语言是一种功能强大的编程语言,它在计算机编程领域有着广泛的应用,并且拥有丰富的特性和库函数。掌握C语言对于学习编程和深入理解计算机系统原理非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值