如何使用C语言创建一个链表类并实现`reverse_print()`函数,该函数利用栈数据结构实现逆序输出单链表的元素?
时间: 2024-11-06 11:22:35 浏览: 42
在C语言中,我们可以创建一个简单的链表类(使用头结点表示),并实现一个`reverse_print()`函数,该函数通过模拟栈的过程来实现链表元素的逆序打印。这里是一个简化的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表头结点
Node* create_list() {
return (Node*)malloc(sizeof(Node));
}
// 添加元素到链表
void add_to_list(Node** head, int value) {
Node* newNode = create_list();
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 使用栈辅助逆序打印链表
void reverse_print(Node* head) {
Node* current = head;
Node* stack[100]; // 简化假设栈大小足够大
int top = -1; // 栈顶指针
while (current != NULL) {
stack[++top] = current;
current = current->next;
}
while (top >= 0) {
printf("%d ", stack[top]->data);
top--;
}
printf("\n");
}
int main() {
Node* head = create_list(); // 初始化空链表
add_to_list(&head, 5); // 添加第一个元素
add_to_list(&head, 4);
add_to_list(&head, 3);
add_to_list(&head, 2);
add_to_list(&head, 1);
// 打印逆序链表
printf("Original list (forward): ");
reverse_print(head); // 实际打印是逆序的
return 0;
}
```
在这个例子中,我们首先创建了链表节点结构,并提供了一个`create_list()`函数用于初始化新的节点。然后添加元素到链表,最后实现了`reverse_print()`函数,它通过将链表元素逐个压入栈,再从栈中弹出并打印来实现逆序。
阅读全文