请帮我用C语言创建一个顺序表,表中元素依次为:s、t、d、i、o(均为char类型);查找顺序表中是否包含'b'字符;从顺序表中取出第3个元素并返回其值;在第3个元素后面插入3个新的元素依次为:l、i、b;将顺序表中的最后两个元素删除;将顺序表中的元素输出。
时间: 2024-09-13 21:04:26 浏览: 36
【C语言/知识整理/期末复习】数据在内存中的存储思维导图
在C语言中,我们可以使用结构体来表示顺序表,并提供相应的函数操作它。这里是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct {
char data;
struct Node* next;
} Node;
// 初始化顺序表
Node* createList(char* str) {
Node* head = (Node*)malloc(sizeof(Node));
head->data = *str++;
head->next = NULL;
while (*str) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = *str++;
newNode->next = head->next;
head->next = newNode;
}
return head;
}
// 检查表中是否存在'b'
int containsB(Node* head) {
while (head) {
if (head->data == 'b') {
return 1;
}
head = head->next;
}
return 0;
}
// 取出第3个元素
char getThirdElement(Node* head) {
for (int i = 1; i < 3 && head; i++) {
head = head->next;
}
return (head != NULL) ? head->data : '\0'; // 如果索引越界,返回空字符
}
// 在第3个元素后面插入元素
void insertAfterThird(Node* head) {
char toInsert[] = {'l', 'i', 'b'};
int i = 0;
for (Node* node = head; node && i < 3; node = node->next, i++) {
if (node->next) {
node->next = (Node*)malloc(sizeof(Node));
node->next->data = toInsert[i];
node->next->next = node->next->next;
} else {
printf("表尾无法插入更多元素。\n");
break;
}
}
}
// 删除最后两个元素
void deleteLastTwo(Node** head) {
if (*head && (*head)->next) {
Node* temp = *head;
while (temp->next->next) {
temp = temp->next;
}
free(temp->next);
temp->next = NULL;
}
}
// 打印顺序表
void printList(Node* head) {
while (head) {
printf("%c ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
char input[] = "stdio";
Node* list = createList(input);
if (containsB(list)) {
printf("顺序表中存在'b'\n");
} else {
printf("顺序表中不存在'b'\n");
}
char third = getThirdElement(list);
printf("第3个元素是 '%c'\n", third);
insertAfterThird(list);
printList(list);
deleteLastTwo(&list);
printList(list);
return 0;
}
```
这个程序首先创建了一个包含`s`到`o`的顺序表,然后实现了查找`'b'`、取第3个元素、插入新元素以及删除最后两个元素的功能,并打印了整个过程。
阅读全文