帮我用c语言代码,在VS2010中实现循环链表的ADT
时间: 2024-10-17 09:15:47 浏览: 11
在Visual Studio 2010中实现循环链表(Circular Doubly Linked List)的抽象数据类型(ADT),你需要定义节点结构、头结点以及一些基本操作函数,如插入、删除和遍历等。以下是一个简单的示例:
```c
// 定义链表节点结构体
typedef struct Node {
int data; // 节点存储的数据
struct Node* prev; // 指向前一个节点的指针
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建循环链表的头结点
Node* CreateList() {
return (Node*)malloc(sizeof(Node));
}
// 插入节点到链表头部
void InsertAtHead(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->prev = *head;
newNode->next = *head->next;
if (*head != NULL)
(*head)->next->prev = newNode;
*head = newNode;
if (*head == newNode)
newNode->prev = newNode;
}
// 删除指定值的节点
void DeleteNode(Node** head, int value) {
Node* current = *head;
while (current != NULL) {
if (current->data == value) {
if (current == *head) {
*head = current->next;
if (*head == NULL)
*head = current;
} else {
current->prev->next = current->next;
current->next->prev = current->prev;
}
free(current);
return;
}
current = current->next;
}
printf("Node not found.\n");
}
// 遍历并打印链表
void DisplayList(Node* head) {
Node* temp = head;
do {
printf("%d ", temp->data);
temp = temp->next;
} while (temp != head);
printf("\n");
}
// 示例主函数
int main() {
Node* listHead = CreateList();
InsertAtHead(&listHead, 5); // 插入节点
InsertAtHead(&listHead, 10);
InsertAtHead(&listHead, 15);
printf("Original List:\n");
DisplayList(listHead);
// 这里可以添加删除节点的操作...
DisplayList(listHead); // 打印修改后的列表
return 0;
}
```
阅读全文