顺序表和链表算法c伪代码
时间: 2024-09-14 19:04:28 浏览: 38
链表的操作1
顺序表和链表是两种常见的数据结构,它们各有特点。
**顺序表 (Array) 算法伪代码**:
```cpp
// 定义顺序表节点
typedef struct Node {
int data;
struct Node* next;
} List;
// 创建顺序表
List* createSequentialList(int size) {
List* list = (List*)malloc(size * sizeof(List));
for (int i = 0; i < size; i++) {
list[i].data = 0;
list[i].next = NULL;
}
return list;
}
// 插入元素到顺序表
void insertSequentialList(List* list, int index, int value) {
if (index >= list->length) {
printf("插入位置超出范围\n");
return;
}
// 按照索引移动其他元素
for (int i = list->length - 1; i > index; i--) {
list[i] = list[i - 1];
}
list[index].data = value;
}
// 删除顺序表元素
void deleteSequentialList(List* list, int index) {
if (index >= list->length || !list[index].data) {
printf("删除操作无效\n");
return;
}
// 将后续元素前移填补空位
for (int i = index; i < list->length - 1; i++) {
list[i] = list[i + 1];
}
free(list[list->length - 1]); // 释放最后一个元素的空间
list->length--;
}
// 查找顺序表元素
int searchSequentialList(List* list, int target) {
for (int i = 0; i < list->length; i++) {
if (list[i].data == target) {
return i;
}
}
return -1; // 如果未找到,返回-1
}
```
**链表 (Linked List) 算法伪代码**:
```cpp
// 定义链表节点
struct Node {
int data;
struct Node* next;
};
// 创建单向链表
Node* createLinkedList() {
Node* head = (Node*)malloc(sizeof(Node));
head->data = 0;
head->next = NULL;
return head;
}
// 插入节点到链表
void insertLinkedList(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除链表元素
void deleteLinkedList(Node** head, int target) {
if (!(*head) || (*head)->data != target) {
return; // 搜索头结点
}
Node* temp = *head;
*head = (*head)->next;
free(temp); // 释放已删除节点的空间
}
// 遍历链表查找
int searchLinkedList(Node* head, int target) {
while (head) {
if (head->data == target) {
return 1; // 找到目标,返回1表示存在
}
head = head->next;
}
return 0; // 未找到目标,返回0
}
```
阅读全文