用简单的c语言,建立一个链表結构来存放26个英文字母组成的线性表(a, b, c, ..., z),请写出C语言程序。并在此基础上,设计在链表的任意一个位置插入新的字母,用键盘输入。结点类型为LinkList,head为指向该结点类型的指针
时间: 2024-10-13 17:17:37 浏览: 0
在C语言中,我们可以创建一个简单的单向链表结构来存储26个英文字母。首先,我们需要定义链表节点结构`LinkList`,然后创建一个头节点,并编写插入新元素和从键盘读取输入的方法。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct LinkList {
char letter;
struct LinkList* next;
} Node;
// 创建链表头节点
Node* createLinkedList() {
Node* head = (Node*)malloc(sizeof(Node));
if (head) {
head->letter = '\0'; // 表示结束
head->next = NULL;
}
return head;
}
// 在链表末尾添加字母
void insertLetter(Node** head, char letter) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode) {
newNode->letter = letter;
newNode->next = NULL; // 新增的字母作为尾部
if (*head == NULL) { // 如果链表为空
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
}
// 在链表指定位置插入字母
void insertAtPosition(Node** head, int position, char letter) {
if (position > 0 && position <= 26) { // 检查索引是否有效
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode) {
newNode->letter = letter;
newNode->next = *head; // 保存原有头部到新节点
Node* current = *head;
for (int i = 1; i < position - 1; i++) {
current = current->next;
}
newNode->next = current->next; // 将新节点插入到指定位置
current->next = newNode;
}
}
}
// 主函数,用于测试链表操作
int main() {
Node* head = createLinkedList();
// 插入字母
printf("请输入字母索引(1-26),或输入'q'退出:\n");
char input;
while ((input = getchar()) != 'q') {
if (input >= 'a' && input <= 'z') {
insertAtPosition(&head, input-'a'+1, input);
}
}
// 遍历并打印链表
Node* temp = head;
while (temp != NULL) {
printf("%c -> ", temp->letter);
temp = temp->next;
}
printf("\n");
return 0;
}
```
在这个程序中,我们首先创建一个空链表,然后通过循环获取用户输入并在合适的位置插入字母。用户可以输入字母索引(1-26),或输入`q`退出程序。最后,我们遍历链表并打印出所有的字母。