在C语言中,限制链表的长度通常意味着在添加新元素到链表时检查链表的当前长度,如果长度已经达到了预设的最大值,则不再添加新的元素。下面是一个简单的例子,展示如何实现这一功能。
首先,定义链表节点的结构体:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链表结构体,包含头节点和链表的最大长度
typedef struct LinkedList {
Node* head;
int maxLength;
int currentLength;
} LinkedList;
然后,实现链表的初始化函数,包括设置链表的最大长度和当前长度:
LinkedList* createLinkedList(int maxLength) {
LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
if (list == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
list->head = NULL;
list->maxLength = maxLength;
list->currentLength = 0;
return list;
}
接下来,实现添加节点的函数,并在添加前检查链表长度:
void appendNode(LinkedList* list, int data) {
if (list->currentLength >= list->maxLength) {
printf("Cannot add more elements, list is full.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed\n");
return;
}
newNode->data = data;
newNode->next = NULL;
// 如果链表为空,则新节点为头节点
if (list->head == NULL) {
list->head = newNode;
} else {
// 否则,遍历到链表末尾并添加新节点
Node* temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
list->currentLength++;
}
接下来,实现添加节点的函数,并在添加前检查链表长度:
void appendNode(LinkedList* list, int data) {
if (list->currentLength >= list->maxLength) {
printf("Cannot add more elements, list is full.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed\n");
return;
}
newNode->data = data;
newNode->next = NULL;
// 如果链表为空,则新节点为头节点
if (list->head == NULL) {
list->head = newNode;
} else {
// 否则,遍历到链表末尾并添加新节点
Node* temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
list->currentLength++;
}
最后,可以这样使用这些函数:
int main() {
LinkedList* list = createLinkedList(5); // 创建一个最大长度为5的链表
appendNode(list, 1);
appendNode(list, 2);
appendNode(list, 3);
appendNode(list, 4);
appendNode(list, 5);
// 尝试再次添加,应该被阻止
appendNode(list, 6);
// 这里可以添加代码来遍历链表并打印其内容
return 0;
}
在这个例子中,我们定义了一个LinkedList
结构体来保存链表的头节点、最大长度和当前长度。这样,在添加新节点时,我们就可以轻松地检查链表是否已满,从而防止超出预设的长度限制。