掌握线性表的基本操作:插入、删除、查找、以及线性表合并等操作在链式存储结构上的实现
时间: 2023-06-19 19:08:32 浏览: 123
线性表的基本操作,插入删除,输出线性表内容,输出两个线性表的相同元素
在链式存储结构上实现线性表的基本操作,需要先定义好链表节点的结构体,包括数据域和指向下一个节点的指针域。如下所示:
```c
typedef struct ListNode {
int data; // 数据域
struct ListNode* next; // 指针域
} ListNode;
```
接下来,我们可以定义一个链表的结构体,包括头节点指针和链表长度:
```c
typedef struct List {
ListNode* head; // 头节点指针
int length; // 链表长度
} List;
```
接下来,我们就可以在链式存储结构上实现线性表的基本操作了。
### 插入操作
链式存储结构实现插入操作时,需要先找到插入位置的前一个节点,然后将新节点插入到前一个节点后面。具体实现如下:
```c
void insert(List* list, int index, int value) {
// 如果插入位置小于等于0,则插入到链表头部
if (index <= 0) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->data = value;
node->next = list->head;
list->head = node;
list->length++;
return;
}
// 如果插入位置大于等于链表长度,则插入到链表尾部
if (index >= list->length) {
index = list->length;
}
// 找到插入位置的前一个节点
ListNode* prev = list->head;
for (int i = 0; i < index - 1; i++) {
prev = prev->next;
}
// 创建新节点
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->data = value;
// 将新节点插入到前一个节点后面
node->next = prev->next;
prev->next = node;
list->length++;
}
```
### 删除操作
链式存储结构实现删除操作时,需要先找到要删除的节点的前一个节点,然后将前一个节点的指针域指向要删除节点的下一个节点。具体实现如下:
```c
void remove(List* list, int index) {
// 如果要删除的位置小于等于0,则删除链表头节点
if (index <= 0) {
ListNode* temp = list->head;
list->head = list->head->next;
free(temp);
list->length--;
return;
}
// 如果要删除的位置大于等于链表长度-1,则删除链表尾节点
if (index >= list->length - 1) {
index = list->length - 1;
}
// 找到要删除节点的前一个节点
ListNode* prev = list->head;
for (int i = 0; i < index - 1; i++) {
prev = prev->next;
}
// 删除节点
ListNode* temp = prev->next;
prev->next = temp->next;
free(temp);
list->length--;
}
```
### 查找操作
链式存储结构实现查找操作时,需要从链表头节点开始遍历,直到找到要查找的节点。具体实现如下:
```c
int find(List* list, int value) {
ListNode* current = list->head;
int index = 0;
while (current != NULL) {
if (current->data == value) {
return index;
}
current = current->next;
index++;
}
return -1;
}
```
### 合并操作
链式存储结构实现合并操作时,需要将一个链表的尾节点指向另一个链表的头节点。具体实现如下:
```c
void merge(List* list1, List* list2) {
if (list1->head == NULL) {
list1->head = list2->head;
} else {
ListNode* current = list1->head;
while (current->next != NULL) {
current = current->next;
}
current->next = list2->head;
}
list1->length += list2->length;
}
```
以上就是在链式存储结构上实现线性表基本操作的具体实现。
阅读全文