複習一下 struct
struct Student {
char firstName[20];
std::string lastName;
int age;
bool gender;
int grade;
};
struct 變數宣告
Student sprout1;
匿名 struct 變數宣告
struct SproutStudent {
std::string name;
bool gender;
int grade;
} sprout;
struct {
std::string name;
bool gender;
int grade;
} sprout;
struct 初始化
SproutStudent sprout1 = {"chengscott", true, 87};
存取 struct 成員
sprout1.grade;
sprout1.gender = false;
SproutStudent *s = &sprout1;
s->grade;
s->gender = true;
函數參數傳遞
bool isPass(Student rhs);
bool isPass(Student* rhs);
bool isPass(const Student* rhs) {
return rhs->grade >= 60;
}
bool isPass(const Student& rhs) {
return rhs.grade >= 60;
}
函數參數傳遞
int totalGrade(Student rhs[]);
int totalGrade(Student *rhs);
int totalGrade(const Student rhs[]);
配置與釋放記憶體
- 靜態
- 和之前相同,會自動在宣告時配置記憶體,在結束生命週期時釋放
- 動態
new
和 delete
Student *sprout = new Student;
delete sprout;
int n;
Student *stu = new Student[n];
delete[] stu;
new
使用之後記得 delete
- 小心不要操作到
delete
後的指標
單向鏈結串列
struct Node {
int data;
Node *next;
};
Node *head_ = new Node;
- 第一個節點位置是
head_
- 最後一個會指向空節點(通常是
nullptr
)

如何遍歷?
Node *cur;
cur = head_;
for (int i = 0; i < n; ++i) {
cur = cur->next;
}
cur->data;
while (cur != nullptr) {
cur = cur->next;
}
cur->data;
插入節點
- 產生新節點
- 填寫新節點元素值
- 填寫新節點元素下一個節點
- 修改
p
節點的下一個節點為新節點

刪除節點
- 將
del_node
節點指向 p
節點的下一個節點
- p 節點的下一個節點指向
del_node
節點的下一個節點
- 刪除
del_node
節點

雙向鏈結串列
struct Node {
int data;
Node *prev;
Node *next;
};

如何?
- 找到第 n 個節點?
- 找到最後一個節點?
- 插入節點?
- 刪除節點?
struct 和動態記憶體 05.20 鄭余玄
{"metaMigratedAt":"2023-06-14T12:54:40.985Z","metaMigratedFrom":"YAML","title":"struct 和動態記憶體","breaks":true,"slideOptions":"{\"theme\":\"serif\"}","contributors":"[]"}