编程实现如下功能: (1)构建链表,并初始化一个空的链表 (2)在链表的表头依次插入整数1~5后,将链表中的元素依次打印出来; 删除链表的第5个元素后,依次输出顺序表中的元素。c语言实现
时间: 2024-11-04 17:06:15 浏览: 28
K 个一组翻转链表1
在C语言中,我们可以使用结构体和指针来实现链表。这里是一个简单的示例,展示了如何创建链表、插入元素、打印链表以及删除指定位置的元素:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化一个空链表
Node* createList() {
return NULL;
}
// 在链表头部插入元素
void insertAtHead(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 打印链表中的元素
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 删除链表的第n个元素(从0开始计数)
void deleteElement(Node** head, int n) {
if (*head == NULL || n >= nNodes(head)) { // 如果链表为空或索引越界
return;
}
Node* current = *head;
Node* previous = NULL;
for (int i = 0; i < n && current != NULL; ++i) {
previous = current;
current = current->next;
}
if (previous == NULL) { // 删除头节点
*head = current->next;
} else { // 删除中间或尾部节点
previous->next = current->next;
}
free(current); // 释放已删除节点的内存
}
// 计算链表中节点的数量
int nNodes(Node* head) {
int count = 0;
while (head != NULL) {
count++;
head = head->next;
}
return count;
}
int main() {
Node* list = createList(); // 创建空链表
// 插入元素
for (int i = 1; i <= 5; i++) {
insertAtHead(&list, i);
}
printf("插入元素后的链表: ");
printList(list);
// 删除第5个元素(即值为5的那个节点)
deleteElement(&list, 4);
printf("删除第5个元素后的链表: ");
printList(list);
return 0;
}
```
这个程序首先定义了一个链表节点结构,然后实现了创建空链表、插入节点、打印链表和删除指定位置节点的功能。在`main()`函数中,我们演示了完整的操作流程。
阅读全文