用c语言写一段完整的代码 1.实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作; 2.用插入法建立带头结点的单循环链表。最后把单链表以头文件的形式保存
时间: 2024-10-08 20:11:31 浏览: 35
好的,这里是一个简单的C语言代码示例,实现了单循环链表的操作,包括初始化、插入、删除、获取元素个数以及创建带头节点的循环链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
head->data = 0; // 初始化第一个节点的数据
head->next = head; // 创建循环链表,指针指向自身
return head;
}
// 添加新节点
void insert(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = (*head)->next;
(*head)->next = newNode;
if ((*head)->next == (*head)) { // 判断是否形成环形链表
printf("Warning: Inserted node created a loop.\n");
}
}
// 删除节点
void deleteNode(Node** head, int target) {
Node* current = *head;
while (current != NULL && current->data != target) {
current = current->next;
}
if (current == NULL) {
printf("Element not found in the list.\n");
return;
}
Node* temp = current->next;
free(current);
*head = temp;
if (*head == NULL) { // 如果删除了最后一个节点
*head = *head->next; // 将链表链接到头
}
}
// 获取元素个数
int countNodes(Node* head) {
int count = 1; // 初始化计数器
Node* temp = head->next;
while (temp != head) {
count++;
temp = temp->next;
}
return count;
}
// 打印链表
void printList(Node* head) {
Node* current = head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
printf("\n");
}
int main() {
Node* listHead = createList();
// 插入一些值
for (int i = 1; i <= 5; i++) {
insert(&listHead, i);
}
// 打印初始链表
printf("Initial List:\n");
printList(listHead);
// 删除指定元素并打印
deleteNode(&listHead, 3);
printf("List after deleting element 3:\n");
printList(listHead);
// 输出元素个数
int numElements = countNodes(listHead);
printf("Number of elements in the list: %d\n", numElements);
return 0;
}
```
这个程序首先初始化了一个单循环链表,然后添加了一些数据,展示了删除操作,以及获取和显示链表的元素个数。注意,为了保持循环链表的特性,删除最后一个节点时需要特殊处理。
阅读全文