线性表的插入和删除算法实现c语言程序
时间: 2024-10-15 14:00:54 浏览: 27
线性表通信录【c语言实现】.pdf
5星 · 资源好评率100%
线性表是一种基本的数据结构,通常由一组元素按照特定顺序排列组成。在C语言中,常见的线性表有数组实现和链表实现。以下是分别针对这两种情况的插入和删除操作的简单实现:
**1. 数组实现(动态内存分配不是必需,假设数组长度固定)**
- 插入:若要在数组末尾插入元素,可以直接将新元素放在最后一个位置;如果需要插入指定索引,需先移动后续元素。
```c
void insert_array(int arr[], int size, int value, int index) {
if (index < 0 || index > size) {
printf("Invalid index");
} else {
for (int i = size; i >= index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = value;
}
}
```
- 删除:同样,如果是末尾元素,直接去掉即可;其他地方删除则需要将后续元素前移一位。
```c
void delete_array(int arr[], int size, int index) {
if (index < 0 || index >= size) {
printf("Invalid index");
} else {
for (int i = index; i < size - 1; i++) {
arr[i] = arr[i + 1];
}
// 减少数组长度
size--;
}
}
```
**2. 链表实现(动态内存管理)**
- 插入:链表插入相对复杂一些,主要涉及节点的创建和连接。
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void insert_link_list(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
void delete_link_list(Node** head, int value) {
if (*head == NULL) return;
if (*head->data == value) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next == NULL) return;
Node* temp = current->next;
current->next = current->next->next;
free(temp);
}
```
**相关问题--**
1. 数组和链表在插入、删除效率上有什么区别?
2. 如何处理链表中的大规模插入和删除?
3. 如果线性表元素很大,使用哪种数据结构更合适?
阅读全文