用数据结构语言(C语言版)写出符合下列要求的程序:1.实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作; 2.用插入法建立带头结点的单循环链表; 3.设计一个测试主函数验证所设计单循环链表的正确性。 4.用单循环链表解决一个实际问题。
时间: 2024-10-08 20:11:17 浏览: 63
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表头指针
Node* initList() {
Node* head = (Node*)malloc(sizeof(Node));
if (head == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
head->next = head; // 创建循环链表
head->data = -1; // 标志未填充
return head;
}
// 求链表元素个数
int countNodes(Node* head) {
int count = 0;
Node* current = head;
while (current != head->next) {
count++;
current = current->next;
}
return count;
}
// 插入新元素到链表
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = (*head)->next;
(*head)->next = newNode;
}
// 删除指定位置的元素
void deleteNode(Node** head, int position) {
if (position <= 0 || *head == NULL) {
printf("Invalid position or empty list.\n");
return;
}
Node* current = *head;
for (int i = 0; i < position - 1 && current != NULL; i++) {
current = current->next;
}
if (current == NULL) {
printf("Element not found.\n");
return;
}
Node* temp = current->next;
current->next = temp->next;
free(temp);
}
// 取并输出数据元素
void display(Node* head) {
Node* current = head;
while (current != head->next) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// 测试主函数
int main() {
Node* head = initList();
// 插入一些元素
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
// 显示链表
display(head);
printf("Number of elements: %d\n", countNodes(head));
// 删除第二个元素并显示结果
deleteNode(&head, 1);
display(head);
// 清理内存
Node* temp = head;
while (temp != head->next) {
temp = temp->next;
free(temp);
}
free(head);
return 0;
}
```
这个程序实现了单循环链表的基本操作,包括初始化、计数、插入、删除和取值。通过`main()`函数创建了一个简单的例子,演示了如何使用这些操作。为了验证链表的正确性,可以手动检查链表的行为是否符合预期。
阅读全文
相关推荐












