用c语言写创建一个顺序表,表中元素依次为:s、t、d、i、o(均为char类型); 查找顺序表中是否包含'b'字符; 从顺序表中取出第3个元素并返回其值; 在第3个元素后面插入3个新的元素依次为:l、i、b; 将顺序表中的最后两个元素删除; 将顺序表中的元素输出。
时间: 2024-09-19 21:15:04 浏览: 37
谈谈C语言中构造类型数据.pdf
在C语言中,我们可以使用结构体和指针来创建一个动态数组作为顺序表实现。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表的结构体
typedef struct {
char* elements; // 存储字符的动态数组
int size; // 当前元素的数量
} SequenceList;
// 动态分配内存和初始化顺序表
void create_list(SequenceList* list) {
list->elements = (char*)malloc(5 * sizeof(char)); // 预计5个元素
list->size = 0;
list->elements[0] = 's';
list->elements[1] = 't';
list->elements[2] = 'd';
list->elements[3] = 'i';
list->elements[4] = 'o';
}
// 检查顺序表中是否存在'b'
int contains_b(const SequenceList* list) {
for (int i = 0; i < list->size; i++) {
if (list->elements[i] == 'b') return 1; // 返回1表示存在,0表示不存在
}
return 0;
}
// 取出第3个元素
char get_third_element(const SequenceList* list) {
if (list->size >= 3) return list->elements[2]; // 第三个元素索引是2
else return '\0'; // 如果不足3个元素,则返回空字符
}
// 在第3个元素后面插入新元素
void insert_after_third(SequenceList* list, const char* new_elements, int count) {
if (count > 0 && list->size >= 2 + count) {
memmove(list->elements + 3, list->elements + 3, (list->size - 2) * sizeof(char));
list->elements[2] = new_elements[0];
for (int i = 1; i < count; i++, list->elements[2+i] = new_elements[i+1]);
list->size += count;
} else {
printf("无法插入,空间不足或新元素过多.\n");
}
}
// 删除最后两个元素
void delete_last_two(SequenceList* list) {
if (list->size >= 2) {
list->size -= 2;
free(list->elements[list->size]); // 释放最后一个元素的空间
list->elements[list->size] = '\0'; // 空字符串结束
} else {
printf("无法删除,列表为空或只剩一个元素.\n");
}
}
// 打印顺序表
void print_list(const SequenceList* list) {
for (int i = 0; i < list->size; i++) {
printf("%c ", list->elements[i]);
}
printf("\n");
}
int main() {
SequenceList my_list;
create_list(&my_list);
if (contains_b(&my_list)) {
printf("顺序表中含有'b'\n");
} else {
printf("顺序表中不含'b'\n");
}
char third = get_third_element(&my_list);
printf("第3个元素是 '%c'\n", third);
char* new_elements = "lib";
insert_after_third(&my_list, new_elements, 3);
delete_last_two(&my_list);
print_list(&my_list);
return 0;
}
```
注意:此代码仅用于教学目的,并未处理所有可能的边界条件和错误情况。在实际应用中,需要添加更多的错误检查和处理。
阅读全文