建立一个链表結构来存放26个英文字母组成的线性表(a, b, c, ..., z),请写出C语言程序。并在此基础上,设计在顺序表的任意一个位置插入新的字母。
时间: 2024-09-26 11:17:34 浏览: 85
在C语言中,我们可以使用结构体(struct)来创建一个单链表,每个节点代表一个字符。首先,我们定义一个节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
char letter;
struct Node* next;
} Node;
// 初始化链表
Node* createLinkList(char start, char end) {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->letter = start;
head->next = NULL;
Node* current = head;
for (char ch = start + 1; ch <= end; ch++) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
free(head);
return NULL;
}
newNode->letter = ch;
newNode->next = current->next;
current->next = newNode;
current = newNode;
}
return head;
}
// 在链表任意位置插入新字母
void insertLetter(Node** head, int position, char newLetter) {
if (*head == NULL || position <= 0) {
printf("Invalid input or empty list.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->letter = newLetter;
newNode->next = NULL;
if (position == 1) { // 插入到头
newNode->next = *head;
*head = newNode;
} else {
Node* prev = *head;
for (int i = 1; i < position - 1 && prev != NULL; i++) {
prev = prev->next;
}
if (prev == NULL) {
printf("Position out of range.\n");
free(newNode);
return;
}
newNode->next = prev->next;
prev->next = newNode;
}
}
int main() {
char start = 'a';
char end = 'z';
Node* list = createLinkList(start, end);
if (list != NULL) {
printf("Linked list created: ");
Node* temp = list;
while (temp != NULL) {
printf("%c -> ", temp->letter);
temp = temp->next;
}
printf("NULL\n");
// 在第5位置插入字母'y'
insertLetter(&list, 5, 'y');
printf("After inserting 'y' at position 5:\n");
temp = list;
while (temp != NULL) {
printf("%c -> ", temp->letter);
temp = temp->next;
}
printf("NULL\n");
}
return 0;
}
```
在这个程序中,我们首先创建了一个包含26个字母的链表,然后提供了一个`insertLetter`函数来在指定位置插入新的字母。注意,由于C语言中数组索引从0开始,所以在实际操作中,如果你想插入在位置1(第一个元素),你应该传递0作为位置参数。
阅读全文