c语言新建一个链表,将输入的数据采用前插法或后插法存入链表中,并将输入的元素输出,并完成以下操作:删除指定位置的元素,向指定位置插入元素,查找某元素在链表中的位置
时间: 2024-10-20 13:03:54 浏览: 35
C语言数据结构实现链表逆序并输出
在C语言中,我们可以使用结构体表示链表节点,然后通过函数实现链表的基本操作。这里我将演示如何创建链表并支持前插、后插以及删除和插入操作。首先,我们需要定义链表节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指针指向下一个节点
} ListNode;
// 创建链表头指针
ListNode* createList() {
return NULL;
}
// 插入元素到链表头部 (前插)
void insertAtFront(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 插入元素到链表尾部 (后插)
void insertAtEnd(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
if (*head == NULL) {
*head = newNode;
return;
}
ListNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
// 删除指定位置的元素 (假设位置从0开始计数)
int deleteElement(ListNode** head, int position) {
if (*head == NULL || position >= 1) {
return -1; // 如果链表为空或位置无效,返回错误码
}
ListNode* temp = *head;
ListNode* prev = NULL;
for (int i = 0; i < position && temp != NULL; ++i) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return -1;
}
if (prev == NULL) { // 第一个元素
*head = temp->next;
} else {
prev->next = temp->next;
}
free(temp); // 释放已删除的节点内存
return 0; // 成功删除,返回0
}
// 查找元素在链表中的位置 (从0开始计数)
int findPosition(ListNode* head, int target) {
ListNode* current = head;
int position = 0;
while (current != NULL) {
if (current->data == target) {
return position;
}
current = current->next;
position++;
}
return -1; // 元素未找到,返回-1
}
// 打印链表中的所有元素
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 初始化链表并进行测试
ListNode* head = createList();
// 插入元素、删除元素、查找元素等操作...
// 最后打印链表
printList(head);
return 0;
}
```
阅读全文