单链表的基本操作代码(创建单链表
时间: 2024-04-26 16:15:57 浏览: 109
单链表的一些基本操作的代码实现
、插入节点、删除节点、查找节点、遍历节点等)。
单链表的基本操作包括:
1. 单链表的初始化
2. 判断单链表是否为空表
3. 销毁单链表
4. 清空单链表
5. 求单链表的长度
6. 取单链表中某个位置的元素值
7. 按值查找单链表中某个元素的位置
8. 在单链表中插入一个节点
9. 删除单链表中的一个节点
10. 头插法建立单链表
11. 尾插法建立单链表
以下是单链表基本操作的代码实现:
1. 单链表的初始化
```
Status IniList(LinkList *L) {
*L = (LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
(*L)->next = NULL; /* 指针域为空 */
return OK;
}
```
2. 判断单链表是否为空表
```
bool IsEmpty(LinkList L) {
return L->next == NULL;
}
```
3. 销毁单链表
```
Status DestroyList(LinkList *L) {
LinkList p, q;
p = *L;
while (p) {
q = p->next;
free(p);
p = q;
}
*L = NULL;
return OK;
}
```
4. 清空单链表
```
Status ClearList(LinkList L) {
LinkList p, q;
p = L->next;
while (p) {
q = p->next;
free(p);
p = q;
}
L->next = NULL;
return OK;
}
```
5. 求单链表的长度
```
int ListLength(LinkList L) {
int len = 0;
LinkList p = L->next;
while (p) {
len++;
p = p->next;
}
return len;
}
```
6. 取单链表中某个位置的元素值
```
Status GetElem(LinkList L, int i, ElemType *e) {
int j = 1;
LinkList p = L->next;
while (p && j < i) {
p = p->next;
j++;
}
if (!p || j > i) {
return ERROR;
}
*e = p->data;
return OK;
}
```
7. 按值查找单链表中某个元素的位置
```
int LocateElem(LinkList L, ElemType e) {
int i = 1;
LinkList p = L->next;
while (p && p->data != e) {
p = p->next;
i++;
}
if (!p) {
return 0;
}
return i;
}
```
8. 在单链表中插入一个节点
```
Status ListInsert(LinkList L, int i, ElemType e) {
int j = 0;
LinkList p = L, s;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || j > i - 1) {
return ERROR;
}
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
```
9. 删除单链表中的一个节点
```
Status ListDelete(LinkList L, int i, ElemType *e) {
int j = 0;
LinkList p = L, q;
while (p->next && j < i - 1) {
p = p->next;
j++;
}
if (!(p->next) || j > i - 1) {
return ERROR;
}
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
```
10. 头插法建立单链表
```
LinkList CreateListHead(int n) {
LinkList L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
for (int i = 0; i < n; i++) {
LinkList p = (LinkList)malloc(sizeof(Node));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
return L;
}
```
11. 尾插法建立单链表
```
LinkList CreateListTail(int n) {
LinkList L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
LinkList r = L;
for (int i = 0; i < n; i++) {
LinkList p = (LinkList)malloc(sizeof(Node));
scanf("%d", &(p->data));
r->next = p;
r = p;
}
r->next = NULL;
return L;
}
```
阅读全文