链表、运算符

1、尾插
void push_back(struct Node *pHead,int n)
{
    if(isEmpty(pHead))
    {
        push_front(pHead,n);
    }
    else
    {
        struct Node *p = pHead->next;
        struct Node *pNew = malloc(sizeof(struct Node));
        while(p->next != NULL)
        {
            p = p->next;
        }
        p->next = pNew;
        pNew->next = NULL;
        pNew->data = n;
    }
}
//头删
void pop_front(struct Node *pHead)
{
    if(!isEmpty(pHead))
    {
        struct Node *p = pHead->next;
        pHead->next = p->next;
        free(p);
    }
}

//尾删
void pop_back(struct Node *pHead)
{
    if(size(pHead) >= 2)
    {
        struct Node *p = pHead->next;
        while(p->next->next != NULL)
        {
            p = p->next;
        }
        free(p);
        p->next = NULL;
    }
    else
    {
        pop_front(pHead);
    }
}

//清除
void clear(struct Node *pHead)
{
    while(!isEmpty(pHead))
    {
        pop_front(pHead);
    }
}
 2、枚举

如果一个变量只有几种可能的值,则可以定义为枚举类型,将变量一一列举出来,变量的值只限于列举出来的值的范围内。

3、typedef 定义类型

声明新的类型名来代替已有类型名 

 

 4、位运算

 

& :参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为 1 ,则该位的结果值为 1 ;否则为0;

 | :两个相应的二进制中只要有一个为1,该位结果值为1。 

 ^ :若参加运算的两个二进制位同号,则结果为0(假);异号则为1(真)。

~ :用来对一个二进制数按位取反。

 

 << :将一个数的各二进制位全部左移若干位。

>> :各二进制右移若干位。 

右移需注意符号位问题。对无符号数 ,右移时左移高位移入0;有符号数,正数移入0,负数移入1。

先后顺序从上到下:

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中,我们可以通过运算符重载来自定义单向链表的操作。下面是一个简单的单向链表类的定义和运算符重载的实现: ```cpp #include <iostream> using namespace std; class Node { public: int data; Node *next; Node(int d = 0, Node *n = nullptr) { data = d; next = n; } }; class LinkedList { public: Node *head; LinkedList() { head = nullptr; } ~LinkedList() { Node *p; while (head != nullptr) { p = head; head = head->next; delete p; } } void insert_front(int d) { Node *p = new Node(d, head); head = p; } void print() { Node *p = head; while (p != nullptr) { cout << p->data << " "; p = p->next; } cout << endl; } LinkedList& operator+=(const LinkedList &rhs) { Node *p = head; while (p->next != nullptr) { p = p->next; } p->next = rhs.head; return *this; } }; int main() { LinkedList list1, list2; list1.insert_front(3); list1.insert_front(2); list1.insert_front(1); list1.print(); list2.insert_front(6); list2.insert_front(5); list2.insert_front(4); list2.print(); list1 += list2; list1.print(); return 0; } ``` 在上面的例子中,我们定义了一个 `LinkedList` 类和一个 `Node` 类,其中 `Node` 类表示链表中的节点。我们可以向链表中插入元素并打印链表的内容。此外,我们还重载了加号运算符 `+=`,使得可以将两个链表连接起来。 在 `+=` 运算符的实现中,我们首先找到链表的末尾节点,然后将其指向第二个链表的头节点。最后,返回当前链表的引用,以便可以进行链式操作。 在上述代码中,我们只重载了加号运算符,你可以根据需要定义其他运算符如等于运算符 `=` 和输出运算符 `<<` 等,以满足更加复杂的链表操作需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值