C语言实现顺序表链表的创建、插入、删除、输出、求长度、判断是否为空 需要各部分的功能测试代码
时间: 2024-09-27 07:08:19 浏览: 34
数据结构-C语言描述(顺序表、链表)
在C语言中,我们可以使用结构体来表示链表节点,并通过头指针来管理顺序列表(也可以称为简单链表)。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建链表节点函数
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 插入节点到链表尾部
void insertNode(ListNode** head, int value) {
ListNode* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
ListNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除指定值的节点
void deleteNode(ListNode** head, int value) {
ListNode* temp = *head, *prev;
if (temp != NULL && temp->data == value) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != value) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return; // 没找到该值
prev->next = temp->next;
free(temp);
}
// 输出链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 获取链表长度
int getLength(ListNode* head) {
int length = 0;
ListNode* temp = head;
while (temp != NULL) {
length++;
temp = temp->next;
}
return length;
}
// 判断链表是否为空
int isEmpty(ListNode* head) {
return head == NULL;
}
// 测试代码
int main() {
ListNode* head = NULL;
// 测试插入
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
// 输出链表
printList(head); // 输出: 1 2 3
// 测试删除
deleteNode(&head, 2);
// 再次输出验证删除效果
printList(head); // 输出: 1 3
// 测试其他功能
printf("链表长度: %d\n", getLength(head)); // 链表长度: 2
printf("链表是否为空: %d\n", isEmpty(head)); // 链表是否为空: 0
return 0;
}
```
这段代码实现了顺序链表的基本操作,包括创建、插入、删除、打印、长度计算以及检查空链表。每个功能都有对应的测试示例。你可以根据需要对这些函数进行适当的修改和扩展。
阅读全文