C语言编程:请利用线性表的顺序或链式存储结构模拟一带一路沿线地区的加入、查询、撤销等操作
时间: 2024-10-11 18:14:02 浏览: 42
C语言线性表顺序存储结构实例详解
5星 · 资源好评率100%
在C语言中,我们可以使用数组(顺序存储)或链表(动态链式存储)来模拟一带一路沿线地区(节点)的操作。这里我们分别简述这两种情况:
**顺序存储(数组):**
1. **加入(Add Region)**: 创建一个动态大小的数组,如果还有空间就将新地区添加到末尾,更新数组长度。
```c
void add_region(char* region_name, int* regions) {
if (regions_size < capacity) {
regions[regions_size++] = region_name;
} else {
printf("数组已满,无法添加更多地区。\n");
}
}
```
2. **查询(Query Region)**: 按索引查找指定地区的名称。
```c
char* query_region(int index, char* regions[]) {
if (index >= 0 && index < regions_size) {
return regions[index];
} else {
return NULL; // 或者抛出错误信息
}
}
```
3. **撤销(Remove Region)**: 删除指定位置的地区,通常需要移动后续元素填充空缺。
```c
void remove_region(int index, char* regions[], int* regions_size) {
if (index < *regions_size) {
memmove(®ions[index], ®ions[index+1], (*regions_size - index - 1) * sizeof(char*));
(*regions_size)--;
} else {
printf("尝试删除不存在的位置。\n");
}
}
```
**链式存储(链表):**
1. **加入(Add Region)**: 创建一个新的节点,并将其链接到链表的适当位置。
```c
struct RegionNode {
char* name;
struct RegionNode* next;
};
void add_region(char* region_name, struct RegionNode** head) {
struct RegionNode* new_node = malloc(sizeof(struct RegionNode));
new_node->name = region_name;
new_node->next = *head;
*head = new_node;
}
```
2. **查询(Query Region)**: 遍历链表查找特定区域。
```c
char* query_region(struct RegionNode* node, char* target) {
while (node != NULL) {
if (!strcmp(node->name, target)) {
return node->name;
}
node = node->next;
}
return NULL;
}
```
3. **撤销(Remove Region)**: 需要找到并删除指定节点,然后调整前驱节点指向下一个节点。
```c
void remove_region(char* region_name, struct RegionNode** head) {
struct RegionNode* current = *head, *prev = NULL;
while (current != NULL) {
if (!strcmp(current->name, region_name)) {
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
break;
}
prev = current;
current = current->next;
}
}
```
阅读全文