建立一个顺序表結构来存放26个英文字母组成的线性表(a, b, c, ..., z),请写出C语言程序。并在此基础上,设计在顺序表的任意一个位置插入新的字母。
时间: 2024-09-26 08:17:37 浏览: 57
线性表的链式存储结构..
5星 · 资源好评率100%
为了创建一个顺序表结构存储26个英文大写字母,并在任意位置插入新字母,我们可以使用C语言中的动态数组(动态内存分配)。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define ALPHABET_SIZE 26
typedef struct {
char* letters;
int size;
int capacity;
} AlphabetList;
// 初始化顺序表
AlphabetList initialize_alphabet_list() {
AlphabetList list = {0};
list.capacity = ALPHABET_SIZE + 1; // 预留一个空间用于插入新元素
list.letters = (char*)malloc(list.capacity * sizeof(char));
if (!list.letters) {
printf("Memory allocation failed.\n");
return list;
}
for (int i = 0; i < ALPHABET_SIZE; i++) {
list.letters[i] = 'A' + i;
}
list.size = ALPHABET_SIZE;
return list;
}
// 插入字母到指定位置
void insert_letter(AlphabetList* list, int position, char new_letter) {
if (position < 0 || position > list->size) {
printf("Invalid insertion position.\n");
return;
}
// 如果需要扩展,先将现有数据向后移动
if (list->size == list->capacity) {
list->capacity *= 2;
list->letters = (char*)realloc(list->letters, list->capacity * sizeof(char));
if (!list->letters) {
printf("Memory reallocation failed.\n");
return;
}
}
// 将新字母复制到原位置,然后将后续元素依次后移
memmove(&list->letters[position+1], &list->letters[position], (list->size - position) * sizeof(char));
list->letters[position] = new_letter;
list->size++;
}
// 打印顺序表内容
void print_alphabet_list(const AlphabetList& list) {
for (int i = 0; i < list.size; i++) {
printf("%c ", list.letters[i]);
}
printf("\n");
}
int main() {
AlphabetList alphabet = initialize_alphabet_list();
print_alphabet_list(alphabet); // 输出原始字母表
// 插入新字母 'X'
insert_letter(&alphabet, 5, 'X');
print_alphabet_list(alphabet);
free(alphabet.letters);
return 0;
}
```
在这个程序中,我们首先初始化了一个包含26个字母的顺序表,然后提供了一个`insert_letter`函数来在任意位置插入新的字母。如果需要扩展,我们会调整容量并将数据向前移动。最后,我们在主函数中展示了如何创建、打印以及修改这个顺序表。
阅读全文