用c语言编写一个程序要求如下:首先实现循环单链表的各种基本运算和整体建表算法;其次设计一个程序调用循环单链表的这些算法进行功能测试。
时间: 2024-11-13 16:18:33 浏览: 9
数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc
5星 · 资源好评率100%
在C语言中,要实现循环单链表(Circular Doubly Linked List),我们首先要了解它的结构,包括节点(Node)结构、头结点(Head)以及链表的基本操作,如插入(Insert)、删除(Delete)、查找(Search)等。
**1. 定义数据结构:**
```c
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
```
**2. 创建循环单链表:**
```c
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) return NULL;
head->data = 0; // 初始化第一个元素
head->prev = head;
head->next = head;
return head;
}
```
**3. 插入节点:**
```c
void insertAtEnd(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) return;
newNode->data = value;
newNode->prev = *head;
newNode->next = (*head)->next;
(*head)->next->prev = newNode;
(*head)->next = newNode;
newNode->prev->next = newNode;
}
```
**4. 删除节点:**
```c
void deleteNode(Node** head, int value) {
Node* current = *head;
while (current != NULL && current->data != value) {
current = current->next;
}
if (current == NULL) return; // 没找到对应值
if (current->prev == current->next) { // 如果是头结点
Node* temp = *head;
free(temp);
*head = NULL;
} else {
current->prev->next = current->next;
current->next->prev = current->prev;
free(current);
}
}
```
**5. 功能测试:**
```c
int main() {
Node* list = createList();
// 测试插入
insertAtEnd(&list, 1);
insertAtEnd(&list, 2);
// 打印链表
printList(list);
// 测试删除
deleteNode(&list, 1);
// 再次打印链表检查是否成功删除
printList(list);
return 0;
}
// 辅助函数:遍历并打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
```
阅读全文