请编写26个字母按特定字母值插入或删除的完整程 序 ,可自行选用顺序存储或链表[3]结构输入答案用c语言
时间: 2024-09-19 18:05:11 浏览: 33
在C语言中,我们可以使用链表数据结构来实现这个功能,因为链表允许动态插入和删除元素。这里是一个简单的示例程序,它接受用户输入的字符串,然后按照指定的字母值对每个字母进行操作(插入或删除)。假设我们有一个简单的字符链表节点结构:
```c
typedef struct Node {
char data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(char c) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = c;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表
void insertNode(Node** head, char c, int value) {
if (*head == NULL || c < (*head)->data) {
*head = createNode(c);
} else {
Node* current = *head;
while (current->next != NULL && c > current->data) {
current = current->next;
}
if (current->data <= c) {
current->next = createNode(c);
if (current->next == NULL) {
printf("Insertion failed.\n");
}
} else {
printf("Invalid insertion position.\n");
}
}
}
// 删除节点
void deleteNode(Node** head, char c) {
if (*head == NULL) return;
if (*head->data == c) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != c) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
} else {
printf("Element not found to delete.\n");
}
}
int main() {
// 初始化链表为空
Node* head = NULL;
// 用户输入字符串和操作(insertion或deletion)
char input[100];
char operation;
printf("Enter a string and an operation (i/d): ");
fgets(input, sizeof(input), stdin);
input[strlen(input) - 1] = '\0'; // remove newline
scanf("%c", &operation);
// 按照字母顺序处理每一个字符
for (int i = 0; i < strlen(input); i++) {
char c = input[i];
switch(operation) {
case 'i': // Insert
insertNode(&head, c, /*此处可以设置特定字母值*/ 0);
break;
case 'd': // Delete
deleteNode(&head, c);
break;
default:
printf("Invalid operation.\n");
}
}
// 打印结果
printLinkedList(head);
return 0;
}
// 打印链表函数
void printLinkedList(Node* node) {
while (node != NULL) {
printf("%c -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
```