用简单的c语言,建立一个链表結构来存放26个英文字母组成的线性表(a, b, c, ..., z),请写出C语言程序。并在此基础上,设计在链表的任意一个位置插入新的字母,用键盘输入。结点类型为LinkList,head为指向该结点类型的指针,并输出插入前和插入后的线性表
时间: 2024-10-13 08:17:38 浏览: 31
首先,我们需要定义一个链表节点结构体 `LinkList` 和包含字母的头结点变量 `head`。然后,我们创建一个函数用于添加新字母到链表的指定位置。这里是一个简单的C语言程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义链表节点结构体
typedef struct Node {
char data;
struct Node* next;
} LinkList;
// 初始化链表
void initList(LinkList** head) {
*head = (LinkList*)malloc(sizeof(LinkList));
if (*head == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
(*head)->data = 'a';
(*head)->next = NULL;
}
// 插入字母到链表特定位置
void insertLetter(LinkList** head, int position, char letter) {
LinkList* current = *head;
LinkList* newNode = (LinkList*)malloc(sizeof(LinkList));
if (newNode == NULL) {
printf("Memory allocation failed for new node.\n");
exit(1);
}
newNode->data = letter;
newNode->next = NULL;
if (position == 0) { // 如果在头部插入
newNode->next = *head;
*head = newNode;
return;
}
for (int i = 0; i < position - 1 && current != NULL; ++i) {
current = current->next;
}
if (current == NULL) {
printf("Invalid position to insert.\n");
free(newNode);
return;
}
newNode->next = current->next;
current->next = newNode;
}
// 打印链表
void printList(LinkList* head) {
LinkList* temp = head;
while (temp != NULL) {
printf("%c ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
LinkList* head = NULL;
initList(&head);
// 用户输入字母和插入位置
char inputLetter;
int inputPosition;
printf("Enter a character to insert and its position (0-based): ");
scanf(" %c %d", &inputLetter, &inputPosition);
// 检查输入是否有效
if (!isalpha(inputLetter)) {
printf("Invalid character.\n");
} else {
insertLetter(&head, inputPosition, inputLetter);
printf("Original list:\n");
printList(head);
printf("After insertion at position %d:\n", inputPosition);
printList(head);
}
return 0;
}
```
阅读全文