用c语言写单链表的查找删除添加遍历等操作,并且能输入元素
时间: 2023-05-14 19:05:15 浏览: 121
非常感谢您的提问!以下是单链表的查找、删除、添加和遍历等操作的C语言代码示例:
// 定义单链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域
} Node;
// 初始化单链表
Node* initList() {
Node* head = (Node*)malloc(sizeof(Node)); // 创建头节点
head->next = NULL; // 头节点的指针域为空
return head;
}
// 在单链表末尾添加元素
void addElement(Node* head, int data) {
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = NULL;
p->next = newNode;
}
// 在单链表指定位置插入元素
void insertElement(Node* head, int index, int data) {
Node* p = head;
int i = 0;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL) {
printf("插入位置无效!\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
// 在单链表中查找元素
int findElement(Node* head, int data) {
Node* p = head->next;
int i = 0;
while (p != NULL) {
if (p->data == data) {
return i;
}
p = p->next;
i++;
}
return -1;
}
// 在单链表中删除元素
void deleteElement(Node* head, int data) {
Node* p = head;
while (p->next != NULL) {
if (p->next->data == data) {
Node* temp = p->next;
p->next = temp->next;
free(temp);
return;
}
p = p->next;
}
printf("未找到要删除的元素!\n");
}
// 遍历单链表并输出所有元素
void traverseList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 主函数
int main() {
Node* head = initList(); // 初始化单链表
int n, data;
printf("请输入要添加的元素个数:");
scanf("%d", &n);
printf("请输入%d个元素:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &data);
addElement(head, data); // 在单链表末尾添加元素
}
printf("单链表中的元素为:");
traverseList(head); // 遍历单链表并输出所有元素
printf("请输入要插入的元素位置和值:");
int index;
scanf("%d%d", &index, &data);
insertElement(head, index, data); // 在单链表指定位置插入元素
printf("插入后单链表中的元素为:");
traverseList(head);
printf("请输入要查找的元素值:");
scanf("%d", &data);
int pos = findElement(head, data); // 在单链表中查找元素
if (pos == -1) {
printf("未找到该元素!\n");
} else {
printf("该元素在单链表中的位置为:%d\n", pos);
}
printf("请输入要删除的元素值:");
scanf("%d", &data);
deleteElement(head, data); // 在单链表中删除元素
printf("删除后单链表中的元素为:");
traverseList(head);
return 0;
}
希望这个代码示例能够帮助您!
阅读全文