X02-Day08-代码笔记
2024-08-10 18:21:16
发布于:北京
// 指针的理解
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int a; // 定义一个整数的变量,名称叫 a
int *b; // 定义一个整数类型的指针变量,名称叫 b
// int 一定是声明整数,所以可以把 *b 当成一个整体来看
a = 100;
b = &a; // 存入 a 的内存地址
*b = 0;
*b = 1;
cout << "看看 a " << a << endl;
cout << "b: " << b << endl;
cout << "&a: " << &a << endl;
cout << "*b: " << *b << endl;
cout << "a: " << a << endl;
// int *d, e, f;
// // 1. 都是指针
// // 2. 1 个指针 2 个普通变量 (正确)
//
// cout << sizeof (d) << endl;
// cout << sizeof (e) << endl;
// cout << sizeof (f) << endl;
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
/*
5
4 3 10 9 8
3 10
*/
struct Node {
int val; // 数据
Node *next; // 下一个数据的地址
};
Node *head, *tail;
int n;
// 在尾巴出,添加结点
void append_lst(int x) {
if (head == NULL) { // 空链表
head = new Node; // 申请第一个结点
head->val = x; // 存数据
head->next = NULL; // 因为是第一个,下一个是 NULL
tail = head; // 第一个结点,头尾一致
} else {
// 非空链,在尾巴后链接
Node *tmp = new Node; // 创建结点
tmp->val = x; // 存数据
tmp->next = NULL; // 新尾结点,下一个 NULL
tail->next = tmp; // 接入链表(尾)
tail = tmp; // tail 指向新尾巴
}
}
void print_lst() {
Node *step = head; // 设计单步指针,指向头
while (step != NULL) {
cout << step->val << " "; // 输出结点数据
step = step->next; // 走到下一步
}
cout << endl;
}
void insert_lst(Node *pos, int x) {
// 在链表中的 pos 的后面插入 x
Node *tmp = new Node; // 创造要插入的结点
tmp->val = x;
tmp->next = pos->next; // 先让 tmp 的 next 进链
pos->next = tmp; // 将 pos next 指向 tmp
}
void delete_lst(int x) {
Node *step = head;
// 考虑健壮性
if (step == NULL) return ;
if (step->val == x) {
// 直接删头结点
head = head->next;
if (head == NULL) tail = NULL; // 空链一致
delete step; // 释放内存
} else {
while (step->next != NULL) {
if (step->next->val == x) {
// 找到了要删除的位置 step->next
// 记录一下,以免丢失
Node *del = step->next;
// 若删除的是尾巴结点,先修改 tail
if (del == tail) {
tail = step;
}
// 跳过要删除的结点
step->next = step->next->next;
delete del;
tail->next = NULL;
break;
}
step = step->next;
}
}
}
int m, q;
int main () {
cin >> n;
for (int i = 1; i <= n; i ++) {
int t;
cin >> t;
// 构造链表,建链
append_lst(t);
}
// 在 m 的后面插入 q
cin >> m >> q;
Node *step = head;
while (step != NULL) {
if (step->val == m) {
// 找到 m 了,准备插入
insert_lst(step, q);
// step = step->next; // m q 若可以相同
}
step = step->next;
}
// 从头输出链表
print_lst();
// 在链表中,删除 m
delete_lst(m);
print_lst();
delete_lst(4);
delete_lst(8);
print_lst();
return 0;
}
Day09 树图 👉:https://www.acgo.cn/discuss/study/24864
这里空空如也
有帮助,赞一个