c 动态结构体数组
摘要:
一、动态结构体数组的概念
二、动态结构体数组的实现方法
1.使用链表实现动态结构体数组
2.使用 vector 实现动态结构体数组
3.自定义动态结构体数组类
三、动态结构体数组的优缺点
四、动态结构体数组的应用示例
五、总结
正文:
一、动态结构体数组的概念
动态结构体数组是一种在程序运行时可以自动调整大小、支持动态插入和删除元素的数据结构。相较于传统的数组,动态结构体数组在处理不确定大小的数据时更具有灵活性。
二、动态结构体数组的实现方法
1.使用链表实现动态结构体数组
利用链表可以实现动态结构体数组。具体实现如下:
```c
struct Node {
int data;
Node* next;
};
int main() {
Node* head = NULL;
int n = 10;
for (int i = 0; i < n; ++i) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = head;
head = newNode;
}
}
```
2.使用 vector 实现动态结构体数组
C++中的 vector 也可以实现动态结构体数组。具体实现如下:
```cpp
#include <vector>
int main() {
std::vector<int> vec;
int n = 10;
for (int i = 0; i < n; ++i) {
vec.push_back(i);
}
}
sizeof结构体大小```
3.自定义动态结构体数组类
还可以自定义一个动态结构体数组类来实现动态插入和删除元素。具体实现如下:
```cpp
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cassert>
using namespace std;
class DynamicArray {
public:
DynamicArray() : size(0), data(NULL) {}
~DynamicArray() {
delete[] data;
}
void insert(int index, int value) {
if (index < 0 || index > size) {
throw std::out_of_range("Index out of range");
}
int newSize = (size + 1) * 2;
int* newData = (int*)realloc(data, newSize * sizeof(int));
for (int i = size; i > index; --i) {
newData[i] = data[i - 1];
}
newData[index] = value;
data = newData;
size++;
}
void remove(int index) {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
for (int i = index; i < size - 1; ++i) {
data[i] = data[i + 1];
}
--size;
}
int get(int index) {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
private:
int size;
int* data;
};
int main() {
DynamicArray arr;
arr.insert(1, 10);
arr.insert(0, 20);
arr.insert(2, 30);
std::cout << (0) << std::endl; // 输出 20
ve(1);
std::cout << (1) << std::endl; // 输出 30
}
```
三、动态结构体数组的优缺点
动态结构体数组的优点是可以在程序运行时自动调整大小,支持动态插入和删除元素。而缺点是相较于传统数组,动态结构体数组的访问速度较慢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论