c语言写一段代码 实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作;用插入法建立带头结点的单循环链表。要求把单链表以头文件形式保存且采用模块化程序设计方法实现单循环链表。
时间: 2024-10-08 08:12:18 浏览: 37
C语言单循环链表的表示与实现实例详解
```c
// 首先,我们定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建单循环链表的头结点
Node* create循环链表() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("内存分配失败");
return NULL;
}
head->data = 0; // 初始化头结点的数据
head->next = head; // 设置头结点指向自身形成循环
return head;
}
// 插入操作,插入新的元素到链表指定位置
void insert(Node** head, int index, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败");
return;
}
newNode->data = value;
if (index == 0) { // 插入在头部
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
for (int i = 0; i < index - 1 && current != head; ++i) {
current = current->next;
}
if (current == head) {
printf("无效索引");
return;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 删除操作,从链表中移除指定位置的节点
void delete(Node** head, int index) {
if (*head == NULL || index == 0) {
printf("链表为空或无效索引");
return;
}
Node* current = *head;
Node* previous = NULL;
for (int i = 0; i < index; ++i) {
previous = current;
current = current->next;
if (current == *head) {
printf("无法删除头结点");
return;
}
}
previous->next = current->next;
free(current);
}
// 取数据元素
int getData(Node* node) {
if (node != NULL) {
return node->data;
} else {
printf("链表为空");
return -1;
}
}
// 计算链表元素个数
int countElements(Node* head) {
int count = 1;
Node* current = head;
while (current->next != head) {
current = current->next;
count++;
}
return count;
}
// 将链表作为头文件保存
// 通常我们会创建一个单独的.h文件来存放函数声明,例如:
// ```
// extern Node* head;
// void initializeCircularList();
// int getElementCount();
// void insertElement(int index, int value);
// void deleteElement(int index);
// int getData(int index);
// ```
// 然后在.c文件中提供实现,如上面所示。
阅读全文