建立单链表,查找单链表,删除单链表,插入单链表代码(C语言)
时间: 2025-05-22 12:30:52 浏览: 20
### C语言单链表的操作实现
以下是基于C语言的单链表创建、查找、删除和插入操作的具体代码实现。
#### 1. 单链表的存储结构定义
为了方便后续操作,先定义单链表节点的数据结构:
```c
typedef int ElemType;
// 定义结点类型
typedef struct Node {
ElemType data; // 数据域
struct Node* next; // 指针域
} Node, *LinkedList;
```
[^1]
---
#### 2. 单链表的初始化 (创建头节点)
通过分配内存空间来创建一个带头节点的空链表。
```c
// 初始化单链表
LinkedList InitList() {
LinkedList L = (LinkedList)malloc(sizeof(Node));
if (!L) {
printf("Memory allocation failed!\n");
exit(0);
}
L->next = NULL; // 头节点的指针域置为空
return L;
}
```
[^1]
---
#### 3. 单链表的插入操作
在指定位置前插入新节点。这里假设按顺序号 `i` 插入元素。
```c
// 在第 i 个位置之前插入元素 e
bool InsertElem(LinkedList L, int i, ElemType e) {
if (i < 1) return false; // 不合法的位置
LinkedList p = L; // 找到待插入位置的前驱节点
int j = 0;
while (p && j < i - 1) {
p = p->next;
++j;
}
if (!p || j > i - 1) return false; // 超过范围返回失败
// 创建新节点并赋值
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed!\n");
return false;
}
newNode->data = e;
// 插入操作
newNode->next = p->next;
p->next = newNode;
return true;
}
```
---
#### 4. 单链表的查找操作
根据给定值找到其所在位置;如果不存在,则返回 `-1` 表示未查找到该值。
```c
// 查找第一个等于e的元素所在的逻辑序号(从1开始计数)
int LocateElem(LinkedList L, ElemType e) {
int index = 1;
LinkedList p = L->next; // 从实际的第一个有效节点出发遍历
while (p != NULL) {
if (p->data == e) return index;
p = p->next;
++index;
}
return -1; // 如果找不到则返回-1表示错误或者不存在此元素
}
```
[^1]
---
#### 5. 单链表的删除操作
按照索引删除对应位置上的节点,并释放被删掉部分所占用的空间资源。
```c
// 删除第 i 个位置处的元素
bool DeleteElem(LinkedList L, int i, ElemType* result) {
if (i < 1) return false; // 非法输入直接退出
LinkedList p = L; // 寻找目标节点之前的那个节点
int j = 0;
while (p && j < i - 1){
p=p->next ;
++j ;
}
if(!p||!p ->next )return false ; // 判断越界情况
// 记录要删除节点的信息
(*result)=p ->next ->data ;
// 修改链接关系完成物理意义上的移除动作
LinkedList q = p->next;
p->next=q ->next ;
free(q); // 回收动态申请出来的那片区域
return true;
}
```
---
#### 6. 测试函数
可以编写如下测试程序验证以上功能是否正常工作:
```c
#include<stdio.h>
#include<stdlib.h>
void PrintList(LinkedList L){
LinkedList temp=L->next;
while(temp!=NULL){
printf("%d ",temp->data );
temp=temp->next ;
}
puts("");
}
int main(){
LinkedList list=InitList();
for(int k=0;k<5;++k )
InsertElem(list,k+1 ,rand()%100 );
PrintList(list);
ElemType res=-9999;
if(DeleteElem(list,3,&res ))
printf("Deleted element:%d\n",res );
else
puts("Deletion Failed!");
PrintList(list);
int pos=LocateElem(list,78 ); //-example value to search
if(pos!=-1)
printf("Found at position %d.\n",pos );
else
puts("Not Found.");
return 0;
}
```
[^1]
---
###
阅读全文