使用c语言.线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、归并等)。
时间: 2023-07-10 13:07:36 浏览: 139
dm03_线性表链式存储设计与实现.zip_数据结构(C语言)
线性表链式存储结构是由若干个节点组成的链表,每个节点包括一个数据域和一个指针域。数据域存储数据,指针域指向下一个节点。以下是基本操作的实现:
### 1. 初始化
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
// 初始化链表
LinkList InitList() {
LinkList L = (LinkList) malloc(sizeof(LNode));
if (L == NULL) {
printf("初始化失败!\n");
exit(-1);
}
L->next = NULL;
return L;
}
```
### 2. 赋值
```c
// 赋值操作
void ListAssign(LinkList L, int i, int e) {
// 找到第i个节点
int j = 1;
LNode *p = L->next;
while (p != NULL && j < i) {
p = p->next;
j++;
}
// 如果第i个节点不存在
if (p == NULL || j > i) {
printf("赋值失败:不存在第%d个节点!\n", i);
return;
}
// 赋值
p->data = e;
}
```
### 3. 取值
```c
// 取值操作
int ListGetElem(LinkList L, int i) {
// 找到第i个节点
int j = 1;
LNode *p = L->next;
while (p != NULL && j < i) {
p = p->next;
j++;
}
// 如果第i个节点不存在
if (p == NULL || j > i) {
printf("取值失败:不存在第%d个节点!\n", i);
return -1;
}
// 返回第i个节点的值
return p->data;
}
```
### 4. 插入
```c
// 插入操作
void ListInsert(LinkList L, int i, int e) {
// 找到第i-1个节点
int j = 0;
LNode *p = L;
while (p != NULL && j < i-1) {
p = p->next;
j++;
}
// 如果第i-1个节点不存在
if (p == NULL || j > i-1) {
printf("插入失败:不存在第%d个节点!\n", i-1);
return;
}
// 创建新节点并插入
LNode *newNode = (LNode*) malloc(sizeof(LNode));
if (newNode == NULL) {
printf("插入失败:内存分配错误!\n");
return;
}
newNode->data = e;
newNode->next = p->next;
p->next = newNode;
}
```
### 5. 删除
```c
// 删除操作
void ListDelete(LinkList L, int i) {
// 找到第i-1个节点
int j = 0;
LNode *p = L;
while (p != NULL && j < i-1) {
p = p->next;
j++;
}
// 如果第i-1个节点不存在
if (p == NULL || j > i-1) {
printf("删除失败:不存在第%d个节点!\n", i-1);
return;
}
// 删除第i个节点
LNode *q = p->next;
p->next = q->next;
free(q);
}
```
### 6. 归并
```c
// 归并操作
LinkList ListMerge(LinkList La, LinkList Lb) {
LNode *pa = La->next;
LNode *pb = Lb->next;
LNode *pc = La;
while (pa != NULL && pb != NULL) {
if (pa->data <= pb->data) {
pc->next = pa;
pc = pa;
pa = pa->next;
} else {
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
free(Lb);
return La;
}
```
阅读全文