在函数库中加入数据域为整数的单向链表和双向链表,并至少实现 insert!、delete!、 pop!、popfirst!、push! 和 pushfirst! 函数。(C)
时间: 2024-09-28 22:10:56 浏览: 28
链表-使用C语言实现非循环双向链表-带头结点+尾结点.zip
在C语言中,为了在函数库中实现数据域为整数的单向链表( Singly Linked List,SLL)和双向链表(Doubly Linked List,DLL),我们需要首先定义结构体来存储节点,然后创建头指针以及必要的操作函数。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单向链表节点
typedef struct Node {
int data; // 数据域为整数
struct Node* next; // 指向下一个节点的指针
} LinkedListNode;
// 定义双向链表节点
typedef struct DoublyLinkedListNode {
int data;
struct DoublyLinkedListNode* prev;
struct DoublyLinkedListNode* next;
} DoublyLinkedListNode;
// 单向链表相关函数
void insert!(LinkedListNode** head, int value) {
LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
newNode->data = value;
newNode->next = *head;
if (*head != NULL)
(*head)->prev = newNode;
*head = newNode;
}
// 双向链表相关函数
void insert_first!(DoublyLinkedListNode** head, int value) {
DoublyLinkedListNode* newNode = (DoublyLinkedListNode*)malloc(sizeof(DoublyLinkedListNode));
newNode->data = value;
newNode->prev = NULL;
newNode->next = *head;
if (*head != NULL)
(*head)->prev = newNode;
*head = newNode;
}
// 删除操作等其他函数类似,这里省略
// 提取第一个元素
int pop_first!(LinkedListNode** head) {
if (*head == NULL) return -1; // 如果链表为空
int value = (*head)->data;
LinkedListNode* temp = *head;
*head = (*head)->next;
free(temp);
return value;
}
// 删除最后一个元素
int pop!(LinkedListNode** head) {
// 实现逻辑...
}
// 添加到列表头部
void push_first!(LinkedListNode** head, int value) {
insert_first!(head, value);
}
// 添加到列表尾部
void push!(LinkedListNode** head, int value) {
insert!(head, value);
}
//
阅读全文