数据结构单链表的实现代码c语言
时间: 2023-10-10 16:06:30 浏览: 36
以下是单链表的C语言代码实现,包括建立线性表、删除、查找、插入元素等操作:
```c
#include<stdio.h>
#include<stdlib.h>
// 单链表结点的定义
typedef struct LNode{
int data; // 数据域
struct LNode *next; // 指针域,指向下一个结点
}LNode, *LinkList;
// 单链表的建立
void CreateList(LinkList *L, int a[], int n){
*L = (LinkList)malloc(sizeof(LNode)); // 创建头结点
(*L)->next = NULL; // 头结点的指针域为空
LNode *p = *L; // p指向当前结点
for(int i=0; i<n; i++){
LNode *s = (LinkList)malloc(sizeof(LNode)); // 创建新结点
s->data = a[i]; // 数据域赋值
s->next = NULL; // 指针域为空
p->next = s; // p的指针域指向新结点s
p = s; // p指向新的结点s
}
}
// 单链表的删除
bool DeleteList(LinkList L, int i, int *e){
if(i<1) return false; // i的值不合法
LNode *p = L;
int j = 0;
while(p->next!=NULL && j<i-1){
p = p->next;
j++;
}
if(p->next==NULL) return false; // i的值超过了链表长度
LNode *q = p->next;
*e = q->data;
p->next = q->next;
free(q);
return true;
}
// 单链表的查找
int LocateList(LinkList L, int e){
LNode *p = L->next;
int i = 1;
while(p!=NULL && p->data!=e){
p = p->next;
i++;
}
if(p==NULL) return 0; // 没找到
else return i; // 返回e所在位置
}
// 单链表的插入
bool InsertList(LinkList L, int i, int e){
if(i<1) return false; // i的值不合法
LNode *p = L;
int j = 0;
while(p!=NULL && j<i-1){
p = p->next;
j++;
}
if(p==NULL) return false; // i的值超过了链表长度
LNode *s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
// 单链表的输出
void PrintList(LinkList L){
LNode *p = L->next;
while(p!=NULL){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(){
LinkList L;
int a[] = {1,2,3,4,5};
int n = 5;
CreateList(&L, a, n);
PrintList(L);
int e;
DeleteList(L, 3, &e);
printf("%d\n", e);
PrintList(L);
int pos = LocateList(L, 4);
if(pos==0) printf("4不存在\n");
else printf("4在链表中的位置为%d\n", pos);
InsertList(L, 3, 6);
PrintList(L);
return 0;
}
```
运行结果:
```
1 2 3 4 5
3
1 2 4 5
4在链表中的位置为3
1 2 6 4 5
```
阅读全文