用c语言写一段代码 1.实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作; 2.用插入法建立带头结点的单循环链表。最后把单链表以头文件的形式保存
时间: 2024-10-08 22:11:06 浏览: 36
C语言单循环链表的表示与实现实例详解
在 C 语言中,我们可以创建一个简单的单循环链表结构,并实现基本的操作。首先,我们需要定义链表节点和链表结构体。这里是一个基础的例子:
```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) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0; // 首节点通常设为0 或者 NULL
head->next = head; // 创建循环链表,指针指向自身
return head;
}
// 求链表长度
int length(Node* head) {
int count = 0;
Node* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
// 插入节点
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = (*head)->next;
(*head)->next = newNode;
newNode->next->next = *head; // 维持循环
}
// 删除节点(这里仅删除第一个节点)
void deleteNode(Node** head) {
if (*head == NULL) {
return;
}
Node* temp = *head;
*head = (*head)->next;
free(temp);
}
// 取数据元素
int getData(Node* head) {
if (head == NULL) {
printf("List is empty.\n");
return -1;
}
return head->data;
}
// 将链表保存到头文件中(这里假设我们有一个名为list.h的头文件)
void saveToHeaderFile(const char* filename, Node* head) {
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("Failed to open the file for writing.\n");
return;
}
fprintf(file, "#ifndef LIST_H\n#define LIST_H\n");
fprintf(file, "typedef struct {\n");
fprintf(file, " int data;\n");
fprintf(file, " struct Node* next;\n");
fprintf(file, "} Node;\n");
// 添加其他函数声明
fprintf(file, "extern Node* listHead;\n");
fprintf(file, "extern int listLength();\n");
fprintf(file, "extern void insertNode(int); // 实现略\n");
fprintf(file, "extern void deleteNode(); // 实现略\n");
fprintf(file, "extern int getData(); // 实现略\n");
fprintf(file, "\n#endif // LIST_H\n");
fclose(file);
}
// 主函数示例,用于测试链表功能
int main() {
Node* head = initList();
// 使用链表函数...
return 0;
}
```
阅读全文