用C语言制作一个顺序表
时间: 2024-10-10 18:05:23 浏览: 23
在C语言中,我们可以使用结构体和数组来创建一个简单的顺序表(也称为线性表)。下面是一个基本的顺序表的实现,包括插入、删除和查找元素的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建一个新的顺序表节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 在列表尾部插入新元素
void insertAtEnd(Node** head, int value) {
if (*head == NULL) {
*head = createNode(value);
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = createNode(value);
}
}
// 删除指定值的节点(如果存在)
void deleteElement(Node** head, int value) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* current = *head;
Node* previous = NULL;
if (current->data == value) {
*head = current->next;
free(current);
return;
}
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
if (current == NULL) {
printf("Element not found in the list.\n");
} else {
previous->next = current->next;
free(current);
}
}
// 查找元素并打印其索引(如果找到)
int searchElement(Node* head, int value) {
int index = 0;
Node* temp = head;
while (temp != NULL) {
if (temp->data == value) {
return index;
}
temp = temp->next;
index++;
}
return -1; // 如果未找到,返回-1
}
int main() {
Node* head = NULL;
// 插入示例
insertAtEnd(&head, 10);
insertAtEnd(&head, 20);
insertAtEnd(&head, 30);
// 打印列表
printList(head);
// 删除示例
deleteElement(&head, 20);
// 再次打印列表
printList(head);
// 查找示例
int elementIndex = searchElement(head, 30);
if (elementIndex != -1) {
printf("Element found at index %d\n", elementIndex);
} else {
printf("Element not found.\n");
}
return 0;
}
// 辅助函数:遍历列表并打印元素
void printList(Node* head) {
if (head == NULL) {
printf("List is empty.\n");
return;
}
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
```
在这个例子中,我们首先定义了一个表示顺序表节点的结构体`Node`,然后实现了添加、删除和查找操作。`main`函数展示了如何使用这些函数。
阅读全文