用C语言编写一个程序,程序中建立一个单链表,在此链表上实现以下几种操作: 1.求此单链表的长度; 2.实现在递增整数链表插入新整数并保持序列有序性; 3.删除此单链表的第i个元素结点。
时间: 2024-10-11 16:03:06 浏览: 36
在C语言中,我们可以使用结构体来表示链表节点,并实现上述功能。首先,我们需要定义一个链表节点的结构体:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建一个新的链表节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入新的整数,保持链表有序
void insertSorted(Node** head, int data) {
if (*head == NULL || (*head)->data > data) {
(*head) = createNode(data);
} else {
Node* curr = *head;
while (curr->next != NULL && curr->next->data < data) {
curr = curr->next;
}
if (curr->next != NULL) {
curr->next = createNode(data);
} else {
curr->next = createNode(data);
}
}
}
// 求链表长度
int length(Node* head) {
int count = 0;
Node* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
// 删除第i个元素(从0开始计)
void deleteElement(Node** head, int i) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* temp = *head;
for (int j = 0; j < i && temp != NULL; j++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Invalid index.\n");
return;
}
if (temp->next == NULL) {
free(temp);
*head = NULL;
} else {
temp->next = temp->next->next;
free(temp);
}
}
// 打印链表内容
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
// 初始化示例
insertSorted(&head, 5);
insertSorted(&head, 2);
insertSorted(&head, 8);
insertSorted(&head, 1);
printf("Original list:\n");
printList(head);
// 示例操作
printf("\nLength of the list: %d\n", length(head));
printf("Inserting 4 at the beginning...\n");
insertSorted(&head, 4);
printList(head);
printf("\nDeleting element at index 2 (5)\n");
deleteElement(&head, 1);
printList(head);
return 0;
}
```
这个程序首先创建了一个简单的单链表,然后实现了求长度、插入有序整数以及删除指定位置元素的功能。`main`函数展示了如何使用这些操作。
阅读全文